15

有没有办法删除所有记录NSManagedObjectContext

我正在使用以下代码插入数据:

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

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

如何删除所有记录?我想要类似于“删除:”功能的东西,但要删除所有内容。

4

2 回答 2

39

要删除给定实体的所有实例(我们将使用您的 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 项目附带的模板代码将在不存在时自动创建文件)。然后你有一个全新的空商店。

请注意,代码示例忽略了任何可能的错误。不要那样做。:-)

于 2009-11-13T16:10:41.807 回答
4

一种更快的方法是完全删除商店。这样,您就不会浪费任何时间来获取对象,或者像其他答案那样枚举它们。

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

删除后不要忘记重新创建它。

于 2011-09-30T20:59:34.660 回答