2009-11-12 13 views
14

में सभी रिकॉर्ड हटाएं NSManagedObjectContext से सभी रिकॉर्ड हटाने का कोई तरीका है?NSManagedObjectContext

NSManagedObjectContext * context = [[NSApp delegate] managedObjectContext]; 
NSManagedObject  * basket = nil; 

basket = [NSEntityDescription insertNewObjectForEntityForName:@"ShoppingBasket" 
             inManagedObjectContext: context]; 
[basket setValue:[firstSelectedObject valueForKey:@"accessoryID"] 
      forKey: @"accessoryID"]; 

मैं सभी रिकॉर्ड को नष्ट कैसे करूँ:

मैं डेटा डालने के लिए निम्नलिखित कोड का उपयोग कर रहा हूँ? मुझे ऐसा कुछ चाहिए जो "निकालें:" फ़ंक्शन जैसा है, लेकिन सबकुछ हटाने के लिए।

उत्तर

39

किसी दिए गए इकाई के सभी उदाहरणों को हटाने के लिए (हम आपके शॉपिंगबास्केट का उपयोग करेंगे), आप बस सभी टोकरी ला सकते हैं और फिर उन्हें हटा सकते हैं। यह कोड के कुछ ही लाइनों है:

NSManagedObjectContext * context = [self managedObjectContext]; 
NSFetchRequest * fetch = [[[NSFetchRequest alloc] init] autorelease]; 
[fetch setEntity:[NSEntityDescription entityForName:@"ShoppingBasket" inManagedObjectContext:context]]; 
NSArray * result = [context executeFetchRequest:fetch error:nil]; 
for (id basket in result) 
    [context deleteObject:basket]; 

एक गैर दस्तावेज़ आधारित अनुप्रयोग में विकल्प,, डेटा संग्रह करने के लिए अपने कनेक्शन को बंद कर वास्तविक फ़ाइल को हटाना तो फिर से कनेक्ट (टेम्पलेट कोड के साथ आता है करने के लिए है यदि मानक अनुपस्थित है तो मानक कोर डेटा प्रोजेक्ट स्वचालित रूप से फ़ाइल बना देगा)। फिर आपके पास एक नया, खाली स्टोर है।

नोट, कोड उदाहरण किसी भी संभावित त्रुटि को अनदेखा करता है। ऐसा मत करो। :-)

+1

1 कोड लाइन समाधान नहीं है? यानी फ्लश संदर्भ, या खाली संदर्भ, या हटाएं सभी – aneuryzm

+0

नहीं। कोई सुविधाजनक "ड्रोप डाटाबेस;" में खड़े होना। –

+0

हां, नीचे मेरा जवाब देखें। डेटाबेस हटा देता है और चलिए इसे फिर से बनाते हैं। – runmad

5

स्टोर को पूरी तरह से निकालने का एक बहुत तेज़ तरीका होगा। इस तरह आप वस्तुओं को लाने में किसी भी समय बर्बाद नहीं कर रहे हैं, या अन्य उत्तरों के रूप में उनके माध्यम से गणना कर रहे हैं।

NSError *error; 
NSURL *applicationDocumentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
NSURL *storeURL = [applicationDocumentsDirectory URLByAppendingPathComponent:@"MyCDStore.sqlite"]; 
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error]; 

इसे हटाने के बाद इसे फिर से बनाना न भूलें।

+0

क्या यह विधि उपयोग करने के लिए सुरक्षित है? क्या हम मान सकते हैं कि कोर डेटा हमेशा इस नाम से सहेजा जाएगा, यह स्थान हमेशा? – msk

+0

हां, यदि आप इसे फिर से बनाने के लिए एक ही प्रबंधित ऑब्जेक्ट संदर्भ का उपयोग कर रहे हैं। – runmad

+2

यह ओएस एक्स दस्तावेज़-आधारित डेटा स्टोर के साथ आईओएस और उपेक्षा समस्याओं को मानता है। आप इस तरह के उपयोगकर्ता के दस्तावेज़ को सिर्फ झटका नहीं दे सकते। –

संबंधित मुद्दे