Удалить все записи в NSManagedObjectContext
Есть ли способ удалить все записи из NSManagedObjectContext
?
Я использую следующий код для вставки данных:
NSManagedObjectContext * context = [[NSApp delegate] managedObjectContext];
NSManagedObject * basket = nil;
basket = [NSEntityDescription insertNewObjectForEntityForName:@"ShoppingBasket"
inManagedObjectContext: context];
[basket setValue:[firstSelectedObject valueForKey:@"accessoryID"]
forKey: @"accessoryID"];
Как удалить все записи? Я хочу что-то вроде функции "remove:", но чтобы удалить все.
Ответы
Ответ 1
Чтобы удалить все экземпляры данного объекта (мы будем использовать ваш ShoppingBasket), вы можете просто извлечь все корзины, а затем удалить их. Это всего лишь несколько строк кода:
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];
Альтернативой приложения, не связанного с документом, является закрытие вашего подключения к хранилищу данных, удаление фактического файла, а затем повторное подключение (код шаблона, который поставляется со стандартным проектом Core Data, автоматически создаст файл, если он нет на месте). Затем у вас есть новый, пустой магазин.
Примечание. В примере кода игнорируется любая возможная ошибка. Не делай этого.: -)
Ответ 2
Более быстрый способ - просто полностью удалить хранилище. Таким образом, вы не тратите время на извлечение объектов или перечисление через них, как это делает другой ответ.
NSError *error;
NSURL *applicationDocumentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *storeURL = [applicationDocumentsDirectory URLByAppendingPathComponent:@"MyCDStore.sqlite"];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];
Не забудьте повторно создать его после его удаления.