Удалить все записи в NSManagedObjectContext - PullRequest
15 голосов
/ 13 ноября 2009

Есть ли способ удалить все записи из NSManagedObjectContext?

Я использую следующий код для вставки данных:

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

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

Как мне удалить все записи? Я хочу что-то вроде функции «удалить:», но удалить все.

Ответы [ 2 ]

39 голосов
/ 13 ноября 2009

Чтобы удалить все экземпляры данного объекта (мы будем использовать ваш 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, автоматически создаст файл, если он нет на месте). Тогда у вас есть совершенно новый пустой магазин.

Обратите внимание, пример кода игнорирует любую возможную ошибку. Не делай этого. : -)

4 голосов
/ 01 октября 2011

Гораздо более быстрый способ - полностью удалить хранилище. Таким образом, вы не тратите время на выборку объектов или на их перечисление, как это делает другой ответ.

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

Не забудьте заново создать его после удаления.

...