दिलचस्प पोस्ट
आप सी में लिनक्स पर गैर-अवरुद्ध कंसोल I / O कैसे करते हैं? डायरेक्टरी के एक ज़िप संग्रह को कैसे बनाएं "मानक" समयक्षेत्र संक्षेप क्या हैं? मॉलोक / फ्री / नए / डिलीट पर कब और क्यों 0xCD, 0xDD, आदि में ओएस आरंभीकरण मेमोरी होगी? Django 1.8: मौजूदा स्कीमा के लिए प्रारंभिक माइग्रेशन बनाएं विभिन्न फाइलों में स्रोत फाइलों के साथ मेकफाइल क्यों KML डेटा का उपयोग कर एंड्रॉइड के लिए Google दिशाएं फिर से काम नहीं कर रही हैं? अनेक छवियां चुनें (UIImagePickerController या Photos.app साझा यूआई) क्या अंतर है। नैनट्रैकिंग () बनाते हैं? गिट रेपो से कई फ़ाइलों को हटाने से पहले ही डिस्क से हटा दिया गया है कैसे एसेट फ़ोल्डर पर एक फ़ाइल के लिए एंड्रॉइड पथ स्ट्रिंग प्राप्त करने के लिए? Xcode के तहत आर्किटेक्चर x86_64 के लिए डुप्लिकेट प्रतीकों फ्यूचर / फ़ैक्टर / एपटेक्टिव / मोनाद के अच्छे उदाहरण नहीं हैं? जावा: कमांड लाइन से एक जार फ़ाइल कैसे आयात करें HTML ड्रॉपडाउन सूची में MySQL डाटाबेस से डेटा प्राप्त करना

कोर डेटा में सभी प्रविष्टियों को हटाएं / रीसेट करें?

क्या आप कोर डेटा में संग्रहीत सभी प्रविष्टियों को हटाने के किसी भी तरीके से जानते हैं? मेरी स्कीमा एक ही रहनी चाहिए; मैं इसे रिक्त करने के लिए रीसेट करना चाहता हूं


संपादित करें

मैं इस प्रोग्राम को ऐसा करने के लिए देख रहा हूं ताकि उपयोगकर्ता reset बटन को अनिवार्य रूप से दबा सके।

वेब के समाधान से एकत्रित समाधान "कोर डेटा में सभी प्रविष्टियों को हटाएं / रीसेट करें?"

NSFileManager का उपयोग करके आप अभी भी फ़ाइल को प्रोग्रामेटिक रूप से हटा सकते हैं: removeItemAtPath :: method।

 NSPersistentStore *store = ...; NSError *error; NSURL *storeURL = store.URL; NSPersistentStoreCoordinator *storeCoordinator = ...; [storeCoordinator removePersistentStore:store error:&error]; [[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error]; 

फिर, यह सुनिश्चित करने के लिए कि यह ठीक से तैयार किया गया है, बस लगातार स्टोर को जोड़ें।

प्रत्येक इकाई के माध्यम से पुनरावृत्त करने के लिए प्रोग्राममैटिक तरीके से धीमा और त्रुटि की संभावना होती है। ऐसा करने के लिए इसका उपयोग यह है कि क्या आप कुछ संस्थाओं को हटाना चाहते हैं और अन्य नहीं। हालांकि आपको अभी भी यह सुनिश्चित करने की आवश्यकता है कि आप संदर्भित अखंडता बनाए रखें या आप अपने परिवर्तनों को जारी रखने में सक्षम नहीं होंगे।

बस स्टोर को निकालने और इसे पुनः बनाने के लिए दोनों तेज और सुरक्षित हैं, और निश्चित रूप से रनटाइम पर प्रोग्राम किया जा सकता है

IOS5 + के लिए अपडेट करें

आईओएस 5 और ओएस एक्स 10.7 में बाहरी बाइनरी स्टोरेज (बाह्य रिकॉर्ड फाइल में अनुमति देता है) की अनुमति के साथ, storeURL के द्वारा उठाई गई फ़ाइलों को हटाने के लिए पर्याप्त नहीं है आप बाहरी रिकॉर्ड फ़ाइलों को पीछे छोड़ देंगे चूंकि इन बाह्य रिकॉर्ड फ़ाइलों की नामकरण योजना सार्वजनिक नहीं है, इसलिए मेरे पास एक सार्वभौमिक समाधान नहीं है। – ए 0 मई 8 '12 बजे 23: 00

आप sqllite फ़ाइल को हटा सकते हैं – लेकिन मैं तालिकाओं को एक कार्य के साथ व्यक्तिगत रूप से पुर्ज करने का चयन करता हूं:

 - (void) deleteAllObjects: (NSString *) entityDescription { NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:_managedObjectContext]; [fetchRequest setEntity:entity]; NSError *error; NSArray *items = [_managedObjectContext executeFetchRequest:fetchRequest error:&error]; [fetchRequest release]; for (NSManagedObject *managedObject in items) { [_managedObjectContext deleteObject:managedObject]; DLog(@"%@ object deleted",entityDescription); } if (![_managedObjectContext save:&error]) { DLog(@"Error deleting %@ - error:%@",entityDescription,error); } } 

इसके कारण मैंने मेज से मेज पर जाने का फैसला किया है कि यह मुझे पुष्टि करता है कि मैं प्रोग्रामिंग कर रहा हूं जो तालिका की सामग्री को हटाना समझदार है और वहां डेटा नहीं है जिसे मैं रखना चाहूंगा

इसे करने से यह फ़ाइल को हटाने की तुलना में बहुत धीमी गति से हो जाएगी और अगर मैं इस विधि को बहुत लंबा लेता है तो मैं फ़ाइल को हटा देगा।

IOS 9+ के लिए अद्यतन समाधान

NSBatchDeleteRequest का उपयोग करने के लिए इकाई में सभी वस्तुओं को उन्हें स्मृति में लोड या उनके माध्यम से NSBatchDeleteRequest उपयोग किए बिना हटा दें।

 // create the delete request for the specified entity let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MyEntity") let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest) // get reference to the persistent container let persistentContainer = (UIApplication.shared.delegate as! AppDelegate).persistentContainer // perform the delete do { try persistentContainer.viewContext.execute(deleteRequest) } catch let error as NSError { print(error) } 

यह कोड IOS 10 और स्विफ्ट 3 के लिए अपडेट किया गया है। यदि आपको आईओएस 9 का समर्थन करने की आवश्यकता है, तो यह प्रश्न देखें।

सूत्रों का कहना है:

  • कोर डेटा: किसी इकाई के सभी उदाहरणों को हटाने का सबसे तेज़ तरीका (उद्देश्य-सी कोड भी शामिल है)
  • कोर डेटा में नया क्या है (WWDC 2015 वीडियो)
  • कोर डेटा में नया क्या है (WWDC 2016 वीडियो)
  • आईओएस 10 में कोर डेटा का उपयोग कैसे करें
  • कोर डेटा स्विफ्ट 3.0 में नया क्या है

मैंने एक clearStores विधि लिखा है जो हर स्टोर के माध्यम से जाता है और इसे समन्वयक और फाइल सिस्टम से हटा देता है (त्रुटि को एक तरफ छोड़ दिया गया है):

 NSArray *stores = [persistentStoreCoordinator persistentStores]; for(NSPersistentStore *store in stores) { [persistentStoreCoordinator removePersistentStore:store error:nil]; [[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:nil]; } [persistentStoreCoordinator release], persistentStoreCoordinator = nil; 

यह विधि coreDataHelper वर्ग के अंदर है जो कि (अन्य बातों के अलावा) का ख्याल रखती है, निरंतर coreDataHelper बनाते समय जब यह शून्य होता है

मैं होमव्यू नियंत्रक वर्ग में एक बटन ईवेंट पर कोर डेटा से सभी डेटा निकाल देता हूं: यह आलेख मुझे बहुत मदद करता है मुझे लगा कि मैं योगदान देता हूं।

 -(IBAction)buttonReset:(id)sender { NSLog(@"buttonReset Pressed"); //Erase the persistent store from coordinator and also file manager. NSPersistentStore *store = [self.persistentStoreCoordinator.persistentStores lastObject]; NSError *error = nil; NSURL *storeURL = store.URL; [self.persistentStoreCoordinator removePersistentStore:store error:&error]; [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error]; NSLog(@"Data Reset"); //Make new persistent store for future saves (Taken From Above Answer) if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { // do something with the error } } 

ध्यान दें कि स्वयं को कॉल करने के लिए। PersistentStoreCoordinator मैंने होम व्यू नियंत्रक में एक संपत्ति की घोषणा की। (प्रबंधित ऑब्जेक्ट कॉन्टेक्ट के बारे में चिंता न करें जो मैं बचत और लोड करने के लिए उपयोग करता हूं।)

 @property (nonatomic, retain) NSManagedObjectContext * managedObjectContext; @property (nonatomic, retain) NSPersistentStoreCoordinator * persistentStoreCoordinator; 

फिर AppDelegate अनुप्रयोग में DIDFinish एक HomeViewController बनाने के ठीक नीचे लाँचिंग मैं है:

 homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil]; homeViewController.managedObjectContext = self.managedObjectContext; homeViewController.persistentStoreCoordinator = self.persistentStoreCoordinator; 

जादुई रिकॉर्ड यह बहुत आसान बना देता है।

 [MyCoreDataObject MR_truncateAll]; 

[नई प्रतिक्रियाओं के लिए पूछने वाले उपहार के जवाब में देर से जवाब]

पहले के उत्तरों को देखते हुए,

  • @ ग्रौचेल और अन्य लोगों द्वारा सुझाए गए सभी आइटमों को ला रहा है और हटा रहा है, अभी भी एक प्रभावी और उपयोगी समाधान है। यदि आपके पास बहुत बड़े डेटा स्टोर हैं तो यह धीमा हो सकता है, लेकिन यह अभी भी बहुत अच्छी तरह से काम करता है।
  • बस डेटा स्टोर को निकालना, जैसा कि आप और @ ग्राउंडहाग नोट, अब प्रभावी नहीं हैं यह अप्रचलित है, भले ही आप बाहरी बाइनरी संग्रहण का उपयोग न करें क्योंकि आईओएस 7 SQLite पत्रिकाओं के लिए वाल मोड का उपयोग करता है। वाल मोड के साथ हो सकता है कि (संभावित रूप से बड़ी) जर्नल फाइल किसी भी कोर डेटा लगातार दुकान के लिए बैठी हो।

लेकिन एक अलग, एक समान दृष्टिकोण है जो निरंतर स्टोर को हटाने का काम करता है जो काम करता है। कुंजी को अपनी निरंतर स्टोर फाइल को अपनी उप-निर्देशिका में रखना है जिसमें कुछ और नहीं है दस्तावेज़ निर्देशिका (या जहां भी) में न रखें, लगातार स्टोर के लिए एक नई उप-निर्देशिका बनाएं उस निर्देशिका की सामग्री को लगातार स्टोर फ़ाइल, जर्नल फ़ाइलें और बाहरी बाइनरी फ़ाइलें समाप्त हो जाएगा। यदि आप संपूर्ण डेटा स्टोर को एनक्यूड करना चाहते हैं, तो उस निर्देशिका को हटा दें और वे सभी गायब हो जाएंगे।

अपनी लगातार दुकान की स्थापना करते समय आप ऐसा कुछ करते हैं:

 NSURL *storeDirectoryURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"persistent-store"]; if ([[NSFileManager defaultManager] createDirectoryAtURL:storeDirectoryURL withIntermediateDirectories:NO attributes:nil error:nil]) { NSURL *storeURL = [storeDirectoryURL URLByAppendingPathComponent:@"MyApp.sqlite"]; // continue with storeURL as usual... } 

तब जब आप स्टोर को निकालना चाहते थे,

 [[NSFileManager defaultManager] removeItemAtURL:storeDirectoryURL error:nil]; 

वह पुनरावर्ती दोनों कस्टम उप-निर्देशिका और इसमें सभी कोर डेटा फ़ाइलों को निकालता है

यह केवल तभी काम करता है जब आपके पास पहले से ही, अन्य महत्वपूर्ण डेटा के समान फोल्डर में लगातार स्टोर न हो । दस्तावेज़ निर्देशिका की तरह, इसमें शायद अन्य उपयोगी सामान हैं अगर यह आपकी स्थिति है, तो आप उन फ़ाइलों को ढूंढकर उसी प्रभाव पा सकते हैं, जो आप सभी को छोड़ना और हटाना चाहते हैं कुछ इस तरह:

 NSString *docsDirectoryPath = [[self applicationDocumentsDirectory] path]; NSArray *docsDirectoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:docsDirectoryPath error:nil]; for (NSString *docsDirectoryItem in docsDirectoryContents) { // Look at docsDirectoryItem. If it's something you want to keep, do nothing. // If it's something you don't recognize, remove it. } 

यह दृष्टिकोण त्रुटि प्रवण हो सकता है । आपको पूरी तरह से आश्वस्त होना चाहिए कि आप हर फ़ाइल को जानते हैं जिसे आप रखना चाहते हैं, क्योंकि अन्यथा आप महत्वपूर्ण डेटा निकाल सकते हैं दूसरी ओर, आप बाहरी बाइनरी फ़ाइलों को बिना फाइल / निर्देशिका नाम को जानने के लिए निकाल सकते हैं जो उन्हें भंडारित करने के लिए उपयोग किया जाता था।

आईओएस 9 +, स्विफ्ट 2

सभी संस्थाओं में सभी वस्तुओं को हटाएं

 func clearCoreDataStore() { let entities = managedObjectModel.entities for entity in entities { let fetchRequest = NSFetchRequest(entityName: entity.name!) let deleteReqest = NSBatchDeleteRequest(fetchRequest: fetchRequest) do { try context.executeRequest(deleteReqest) } catch { print(error) } } } 

यदि आप सभी ऑब्जेक्ट्स को हटाना चाहते हैं और बैकअप फ़ाइलों को नहीं हटाना चाहते हैं, तो आप निम्न विधियों का उपयोग कर सकते हैं:

 - (void)deleteAllObjectsInContext:(NSManagedObjectContext *)context usingModel:(NSManagedObjectModel *)model { NSArray *entities = model.entities; for (NSEntityDescription *entityDescription in entities) { [self deleteAllObjectsWithEntityName:entityDescription.name inContext:context]; } } - (void)deleteAllObjectsWithEntityName:(NSString *)entityName inContext:(NSManagedObjectContext *)context { NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:entityName]; fetchRequest.includesPropertyValues = NO; fetchRequest.includesSubentities = NO; NSError *error; NSArray *items = [context executeFetchRequest:fetchRequest error:&error]; for (NSManagedObject *managedObject in items) { [context deleteObject:managedObject]; NSLog(@"Deleted %@", entityName); } } 

सावधान रहें कि यह बहुत धीमा हो सकता है (निर्भर करता है कि आपके ऑब्जेक्ट ग्राफ में कितने ऑब्जेक्ट हैं)।

कोर डेटा को शुद्ध करने के लिए यहां संयुक्त समाधान है

 - (void)deleteAllObjectsInCoreData { NSArray *allEntities = self.managedObjectModel.entities; for (NSEntityDescription *entityDescription in allEntities) { NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; [fetchRequest setEntity:entityDescription]; fetchRequest.includesPropertyValues = NO; fetchRequest.includesSubentities = NO; NSError *error; NSArray *items = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; if (error) { NSLog(@"Error requesting items from Core Data: %@", [error localizedDescription]); } for (NSManagedObject *managedObject in items) { [self.managedObjectContext deleteObject:managedObject]; } if (![self.managedObjectContext save:&error]) { NSLog(@"Error deleting %@ - error:%@", entityDescription, [error localizedDescription]); } } } 

यदि आप सभी ऑब्जेक्ट्स मार्ग को हटाना चाहते हैं (जो कोर डेटा स्टैक फाड़ने से बहुत आसान है, लेकिन कम प्रदर्शनकर्ता), तो यह बेहतर कार्यान्वयन है:

 - (void)deleteAllManagedObjectsInModel:(NSManagedObjectModel *)managedObjectModel context:(NSManagedObjectContext *)managedObjectContext { NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ [managedObjectContext performBlockAndWait:^{ for (NSEntityDescription *entity in managedObjectModel) { NSFetchRequest *fetchRequest = [NSFetchRequest new]; [fetchRequest setEntity:entity]; [fetchRequest setIncludesSubentities:NO]; NSArray *objects = [managedObjectContext executeFetchRequest:fetchRequest error:nil]; for (NSManagedObject *managedObject in objects) { [managedObjectContext deleteObject:managedObject]; } } [managedObjectContext save:nil]; }]; }]; [operation setCompletionBlock:^{ // Do stuff once the truncation is complete }]; [operation start]; } 

यह कार्यान्वयन मुख्य थ्रेड के विलोपन को बंद करने और पूरा होने पर सूचित करने के लिए NSOperation का उपयोग करता है। आप मुख्य थ्रेड की स्थिति को वापस बुलबुले करने के लिए पूरा अधिसूचना या कुछ को पूरा करने के ब्लॉक के भीतर छोड़ना चाहते हैं।

यहां ऐप डिलीगेट करने के लिए कम कॉल्स वाले कुछ सरल संस्करण हैं और अंतिम अंतिम कोड के बाहर छोड़ दिया गया कोड का अंतिम भाग। इसके अलावा मुझे एक त्रुटि मिल रही थी "ऑब्जेक्ट का लगातार स्टोर इस एनएसएमएएनजेड ऑब्जेक्ट कॉन्टैक्ट के समन्वयक से नहीं पहुंच पा रहा है" इसलिए इसे वापस जोड़ने की जरूरत है

 NSPersistentStoreCoordinator *storeCoordinator = [self persistentStoreCoordinator]; NSPersistentStore *store = [[storeCoordinator persistentStores] lastObject]; NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"dataModel"]; NSError *error; [storeCoordinator removePersistentStore:store error:&error]; [[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error]; [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]; if (storeCoordinator != nil) { _managedObjectContext = [[NSManagedObjectContext alloc] init]; [_managedObjectContext setPersistentStoreCoordinator:storeCoordinator]; } 

तेज समाधान:

 class func deleteAllManagedObjects() { let modelURL = NSBundle.mainBundle().URLForResource("some string", withExtension: "mom") let mom = NSManagedObjectModel(contentsOfURL: modelURL) for entityName in mom.entitiesByName.keys { let fr = NSFetchRequest(entityName: entityName as String) let a = Utility.managedObjectContext().executeFetchRequest(fr, error: nil) as [NSManagedObject] for mo in a { Utility.managedObjectContext().deleteObject(mo) } } Utility.managedObjectContext().save(nil) } 

कहीं और खोज को बचाने के लिए त्वरित संदर्भ के रूप में – इसे हटाने के बाद लगातार स्टोर को पुनः बनाने के साथ किया जा सकता है:

 if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { // do something with the error } 

पोस्ट के लिए धन्यवाद। मैंने उसका अनुसरण किया और यह मेरे लिए काम किया। लेकिन मेरे पास एक और मुद्दा था जो इसका उत्तर किसी भी उत्तर में नहीं किया गया था। तो मुझे यकीन नहीं है कि यह सिर्फ मुझे था

वैसे भी, सोचा कि मैं यहां समस्या को हल करता हूं और जिस तरह से इसे हल किया था।

डेटाबेस में मेरे पास कुछ रिकॉर्ड था, मैं डीबी को नए डेटा लिखने से पहले सब कुछ साफ करना चाहता था, इसलिए मैंने इसमें सब कुछ किया

 [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error]; 

और तब डेटाबेस का उपयोग करने के लिए managedObjectContext का उपयोग किया गया था (अब तक खाली होना चाहिए), किसी तरह डेटा अभी भी वहां था कुछ समय बाद समस्या निवारण के बाद, मैंने पाया कि मुझे प्रबंधित ऑब्जेक्ट कॉन्टैक्ट, प्रबंधित ऑब्जेक्ट, प्रबंधित ऑब्जेक्ट मॉोडेल और persistentStoreCoordinator स्टोरी कॉओर्डिनेटर को रीसेट करने की आवश्यकता है, इससे पहले कि मैं डबेज तक पहुंचने के लिए प्रबंधित ऑब्जेक्ट कॉन्टैक्ट का उपयोग करता हूं। अब मुझे लिखने के लिए एक साफ डेटाबेस है

इस प्रश्न के कई अच्छे उत्तर यहाँ एक अच्छा संक्षिप्त एक है। पहले दो पंक्तियाँ SQL डेटाबेस को हटा दें उसके बाद के लिए: लूप प्रबंधित ऑब्जेक्ट कॉन्टैक्सैक मेमोरी में किसी ऑब्जेक्ट को हटाता है।

 NSURL *storeURL = [[(FXYAppDelegate*)[[UIApplication sharedApplication] delegate] applicationDocumentsDirectory] URLByAppendingPathComponent:@"AppName.sqlite"]; [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]; for (NSManagedObject *ct in [self.managedObjectContext registeredObjects]) { [self.managedObjectContext deleteObject:ct]; } 

आईओएस 10 + स्विफ्ट 3 समाधान:

 func clearCoreDataStore() { let delegate = UIApplication.shared.delegate as! AppDelegate let context = delegate.persistentContainer.viewContext for i in 0...delegate.persistentContainer.managedObjectModel.entities.count-1 { let entity = delegate.persistentContainer.managedObjectModel.entities[i] do { let query = NSFetchRequest<NSFetchRequestResult>(entityName: entity.name!) let deleterequest = NSBatchDeleteRequest(fetchRequest: query) try context.execute(deleterequest) try context.save() } catch let error as NSError { print("Error: \(error.localizedDescription)") abort() } } } 

सभी कोर डेटा संस्थाओं के माध्यम से बदल जाता है और उन्हें साफ़ करता है

आप सभी इकाई नाम भी पा सकते हैं, और उन्हें नाम से हटा सकते हैं। यह एक लंबा संस्करण है, लेकिन अच्छी तरह से काम करता है, इस तरह आपको दृढ़ता से स्टोर के साथ काम करना न पड़ता है

  - (void)clearCoreData { NSError *error; NSEntityDescription *des = [NSEntityDescription entityForName:@"Any_Entity_Name" inManagedObjectContext:_managedObjectContext]; NSManagedObjectModel *model = [des managedObjectModel]; NSArray *entityNames = [[model entities] valueForKey:@"name"]; for (NSString *entityName in entityNames){ NSFetchRequest *deleteAll = [NSFetchRequest fetchRequestWithEntityName:entityName]; NSArray *matches = [self.database.managedObjectContext executeFetchRequest:deleteAll error:&error]; } if (matches.count > 0){ for (id obj in matches){ [_managedObjectContext deleteObject:obj]; } [self.database.managedObjectContext save:&error]; } } 

"Any_Entity_Name" के लिए बस अपनी इकाई का कोई भी नाम दें, हमें केवल इकाई विवरण का पता लगाने की आवश्यकता है जो आपकी संस्थाओं के भीतर है। ValueForKey @ "name" सभी इकाई नाम वापस करेगा। अंत में, बचाने के लिए मत भूलना

स्वीकार्य जवाब NSFileManager द्वारा यूआरएल को हटाने के साथ सही है, लेकिन जैसा कि आईओएस 5 + एडिट में कहा गया है, लगातार स्टोर केवल एक फ़ाइल द्वारा प्रदर्शित नहीं किया गया है SQLite स्टोर के लिए यह * .sqlite, * .sqlite-shm और * .sqlite-wal … सौभाग्य से आईओएस 7+ के बाद से हम विधि का उपयोग कर सकते हैं

[NSPersistentStoreCoordinator + removeUbiquitousContentAndPersistentStoreAtURL: विकल्प: त्रुटि:]

हटाने का ख्याल रखना, तो कोड कुछ ऐसा होना चाहिए:

 NSPersistentStore *store = ...; NSError *error; NSURL *storeURL = store.URL; NSString *storeName = ...; NSPersistentStoreCoordinator *storeCoordinator = ...; [storeCoordinator removePersistentStore:store error:&error]; [NSPersistentStoreCoordinator removeUbiquitousContentAndPersistentStoreAtURL:storeURL.path options:@{NSPersistentStoreUbiquitousContentNameKey: storeName} error:&error]; 

आईओएस 10 और स्विफ्ट 3

मान लें कि आपकी इकाई का नाम "फ़ोटो" है, और आप CoreDataStack वर्ग बनाते हैं …

  func clearData() { do { let context = CoreDataStack.sharedInstance.persistentContainer.viewContext let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Photo") do { let objects = try context.fetch(fetchRequest) as? [NSManagedObject] _ = objects.map{$0.map{context.delete($0)}} CoreDataStack.sharedInstance.saveContext() } catch let error { print("ERROR DELETING : \(error)") } } } 

कोरडाटा का उपयोग कैसे करें और इस पद्धति का उपयोग कैसे करें, यह एक अच्छा ट्यूटोरियल है। https://medium.com/compileswift/parsing-json-response-and-save-it-in-coredata-step-by-step-fb58fc6ce16f#.1tu6kt8qb

अपनी फ़ाइल का URL स्क्रिप्ट हटाएं और उसके बाद का निर्माण करें।

यह मानते हुए कि आप MagicalRecord का उपयोग कर रहे हैं और एक डिफ़ॉल्ट दृढ़ता स्टोर है:

मैं सभी समाधानों को पसंद नहीं करता, जो कुछ फ़ाइलों को मौजूद होने के लिए मानते हैं और / या इकाई नामों या वर्गों में प्रवेश करने की मांग करते हैं I यह स्विफ्ट (2) है, सभी संस्थाओं से सभी डेटा को हटाने का एक सुरक्षित तरीका इसे हटाने के बाद भी एक ताजा स्टैक को फिर से बनाना होगा (मुझे यकीन नहीं है कि यह कैसे भाग्य है)।

जब आप हर चीज को हटाना चाहते हैं, लेकिन एक नया स्टोर प्राप्त करने के लिए एक कामकाजी दुकान और एमओसी है, तो यह "लॉगआउट" शैली परिस्थितियों के लिए देवो है (उपयोगकर्ता लॉग इन में एक बार …)

 extension NSManagedObject { class func dropAllData() { MagicalRecord.saveWithBlock({ context in for name in NSManagedObjectModel.MR_defaultManagedObjectModel().entitiesByName.keys { do { try self.deleteAll(name, context: context) } catch { print("⚠️ ✏️ Error when deleting \(name): \(error)") } } }) { done, err in MagicalRecord.cleanUp() MagicalRecord.setupCoreDataStackWithStoreNamed("myStoreName") } } private class func deleteAll(name: String, context ctx: NSManagedObjectContext) throws { let all = NSFetchRequest(entityName: name) all.includesPropertyValues = false let allObjs = try ctx.executeFetchRequest(all) for obj in allObjs { obj.MR_deleteEntityInContext(ctx) } } } 

इसे इस्तेमाल करो

 +(NSArray *)fetchDataFromEntity:(NSString *)entityName context:(NSManagedObjectContext *)context { NSFetchRequest * fetchRequest =[[NSFetchRequest alloc] init]; NSEntityDescription * CategoriesEntity = [NSEntityDescription entityForName:entityName inManagedObjectContext:context]; [fetchRequest setEntity:CategoriesEntity]; NSError * error; NSInteger count = [context countForFetchRequest:fetchRequest error:&error]; if (count && count>0) { NSArray * fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; if (fetchedObjects && fetchedObjects.count>0) { return fetchedObjects; }else return nil; } else return nil; } + (void)deleteObjectsOfArray:(NSMutableArray*)ary context:(NSManagedObjectContext *)context { for (NSManagedObject * obj in ary) { [context deleteObject:obj]; } NSError *saveError = nil; [context save:&saveError]; } + (void)deleteEntity:(NSString *)entityName context:(NSManagedObjectContext *)context { NSArray *listArray = [self fetchDataFromEntity:entityName context:context]; [self deleteObjectsOfArray:[NSMutableArray arrayWithArray:listArray] context:context]; } 

मैंने गौचाल के कोड को लिया और इसे गति देने के लिए मैं समवर्ती मोड ( NSEnumerationConcurrent ) के साथ गणन का उपयोग किया, यह लूप के मुकाबले थोड़ी तेज़ हो गया (मेरे ऐप में मैंने टेस्टर्स के लिए यह फीचर जोड़ा था ताकि वे डेटा को साफ़ कर सकें और हटाए जाने की बजाय परीक्षण कर सकें और एप्लिकेशन इंस्टॉल करें)

 - (void)resetObjects { [self deleteAllObjectsInEntity:@"Entity1"]; [self deleteAllObjectsInEntity:@"Entity2"]; [self deleteAllObjectsInEntity:@"Entity3"]; [self deleteAllObjectsInEntity:@"Entity4"]; } -(void) deleteAllObjectsInEntity:(NSString*) entityName { MainDataContext *coreDataContext = [MainDataContext sharedInstance]; NSManagedObjectContext *currentContext = coreDataContext.managedObjectContext; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:currentContext]; [fetchRequest setEntity:entity]; NSError *error; NSArray *items = [currentContext executeFetchRequest:fetchRequest error:&error]; [items enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSManagedObject * obj, NSUInteger idx, BOOL *stop) { [currentContext deleteObject:obj]; }]; if (![currentContext save:&error]) { NSLog(@"Error deleting %@ - error:%@",entityName,error); } } 

यहां सभी रिकॉर्ड्स को हटाने के लिए मेरी स्विफ्ट 3 संस्करण 'उपयोगकर्ता' इकाई का नाम है

 @IBAction func btnDelAll_touchupinside(_ sender: Any) { let appDelegate = UIApplication.shared.delegate as! AppDelegate let managedObjectContext = appDelegate.persistentContainer.viewContext let fetchReq = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") let req = NSBatchDeleteRequest(fetchRequest: fetchReq) do { try managedObjectContext.execute(req) } catch { // Error Handling } } 

सभी संस्करणों के साथ काम करता है सभी प्रविष्टियों को हटाने के लिए और संदर्भ को बचाने के लिए इकाई नाम पास करें और पुनरावृत्त करें।

 func deleteData(entityToFetch: String, completion: @escaping(_ returned: Bool) ->()) { var context = NSManagedObjectContext() if #available(iOS 10.0, *) { context = self.persistentContainer.viewContext } else { context = self.managedObjectContext } let fetchRequest = NSFetchRequest<NSFetchRequestResult>() fetchRequest.entity = NSEntityDescription.entity(forEntityName: entityToFetch, in: context) fetchRequest.includesPropertyValues = false do { let results = try context.fetch(fetchRequest) as! [NSManagedObject] for result in results { context.delete(result) } try context.save() completion(true) } catch { completion(false) print("fetch error -\(error.localizedDescription)") } } 

लगातार स्टोर फ़ाइल को हटाएं और एक नया निरंतर स्टोर समन्वयक सेट करें?

आप सभी को यह जटिल लगते हैं। आप अपने NSManagedObjectContext रीसेट विधि को भेज सकते हैं