سؤال

هل هناك طريقة لحذف جميع السجلات من NSManagedObjectContext?

أنا أستخدم التعليمات البرمجية التالية لإدراج البيانات:

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

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

كيف يمكنني حذف جميع السجلات؟ أريد شيئا يشبه وظيفة "إزالة:"، ولكن لإزالة كل شيء.

هل كانت مفيدة؟

المحلول

لحذف جميع مثيلات كيان معين (سنستخدم التسوق الخاص بك)، يمكنك ببساطة جلب كل السلال ثم حذفها. انها مجرد خطوط قليلة من التعليمات البرمجية:

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];

البديل في التطبيق غير المستندة إلى المستندات هو إيقاف اتصالك بمتجر البيانات، وحذف الملف الفعلي، ثم إعادة الاتصال (رمز القالب الذي يأتي مع مشروع بيانات أساسي قياسي سيقوم تلقائيا بإنشاء الملف إذا كان غائبا). عندئذ الحصول على متجر جديد، فارغ.

ملاحظة، يتجاهل مثال التعليمات البرمجية أي خطأ ممكن. لا تفعل ذلك. :-)

نصائح أخرى

طريقة أسرع بكثير ستكون مجرد إزالة المتجر بالكامل. وبهذه الطريقة لا تضيع أي وقت جلب كائنات، أو تعدادها من خلالها كأجابية أخرى.

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

لا تنس إعادة إنشاءها بعد حذفها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top