Вопрос

Есть ли способ удалить все записи из 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];

Альтернативой в приложении, не основанном на данных, является выключение вашего подключения к хранилищу данных, удалить фактический файл, а затем повторно подключить (код шаблона, который поставляется со стандартным проектом DATA Data, автоматически создает файл, если он отсутствует). Затем у вас есть совершенно новый, пустой магазин.

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

Другие советы

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

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