[नए जवाब के लिए एक इनाम के जवाब में देर से जवाब]
पहले के जवाबों की तलाश में,
- @Grouchal और अन्य लोगों द्वारा सुझाए गए सभी आइटम लाना और हटाना अभी भी एक प्रभावी और उपयोगी समाधान है। यदि आपके पास बहुत बड़े डेटा स्टोर हैं तो यह धीमा हो सकता है, लेकिन यह अभी भी बहुत अच्छा काम करता है।
- बस डेटा स्टोर को हटाना, जैसा कि आप और @ अग्रहोग नोट, अब प्रभावी नहीं है। यदि आप बाहरी बाइनरी स्टोरेज का उपयोग नहीं करते हैं तो भी यह अप्रचलित है क्योंकि iOS 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.
}
यह दृष्टिकोण त्रुटि प्रवण हो सकता है । आपको पूरी तरह से यकीन है कि आप हर उस फ़ाइल को जानते हैं जिसे आप रखना चाहते हैं, क्योंकि अन्यथा आप महत्वपूर्ण डेटा निकाल सकते हैं। दूसरी ओर, आप बाहरी बाइनरी फ़ाइलों को हटा सकते हैं वास्तव में उन्हें स्टोर करने के लिए उपयोग की जाने वाली फ़ाइल / निर्देशिका नाम को जानने के बिना।
NSBatchDeleteRequest
। stackoverflow.com/a/31961330/3681880