如何从Core Data中删除所有对象

Bur*_*jua 6 iphone core-data objective-c

如何删除所有对象?我知道我可以删除一个

[managedObjectContext deleteObject:objToDelete];
Run Code Online (Sandbox Code Playgroud)

是否有可能删除所有没有迭代所有数组?谢谢

Luk*_*ice 11

此函数从磁盘中删除当前的SQLite db文件并创建一个新文件.它比任何迭代删除都快得多.

-(void)deleteAndRecreateStore{
        NSPersistentStore * store = [[self.persistentStoreCoordinator persistentStores] lastObject];  
        NSError * error;    
        [self.persistentStoreCoordinator removePersistentStore:store error:&error];
        [[NSFileManager defaultManager] removeItemAtURL:[store URL] error:&error];
        __managedObjectContext = nil;
        __persistentStoreCoordinator = nil;
        [self managedObjectContext];//Rebuild The CoreData Stack  
}
Run Code Online (Sandbox Code Playgroud)

如果要在Application Delegate外部调用此函数(假设样板文件为CoreData),可以使用来获取对应用程序委托的引用:

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
Run Code Online (Sandbox Code Playgroud)

不要忘记导入标题.


Chr*_*son 8

将对象标记为删除然后保存按照它的方式工作,因为Core Data仍然需要为要删除的所有对象运行验证规则.毕竟,一个对象可以根据它的响应方式拒绝删除-validateForDelete:.

如果:

  • 你真的想要删除持久存储中的所有内容
  • 并且关心该持久性存储中的对象是否表示它们对删除有效

然后:

  • 拆除使用该持久存储的Core Data堆栈
  • 并删除持久性商店的文件.


sti*_*fin 8

这就是我"重置"我的数据存储所做的事情:

- (BOOL)resetDatastore
{
    [[self managedObjectContext] lock];
    [[self managedObjectContext] reset];
    NSPersistentStore *store = [[[self persistentStoreCoordinator] persistentStores] lastObject]; 
    BOOL resetOk = NO;

    if (store)
    {
        NSURL *storeUrl = store.URL;
        NSError *error;

        if ([[self persistentStoreCoordinator] removePersistentStore:store error:&error])
        {
            [[self persistentStoreCoordinator] release];
            __persistentStoreCoordinator = nil;
            [[self managedObjectContext] release];
            __managedObjectContext = nil;

            if (![[NSFileManager defaultManager] removeItemAtPath:storeUrl.path error:&error])
            {
                NSLog(@"\nresetDatastore. Error removing file of persistent store: %@",
                  [error localizedDescription]);
                resetOk = NO;
            }
            else
            {
                //now recreate persistent store
                [self persistentStoreCoordinator];
                [[self managedObjectContext] unlock];
                resetOk = YES;
            }
        }
        else
        {
            NSLog(@"\nresetDatastore. Error removing persistent store: %@",
              [error localizedDescription]);
            resetOk = NO;
        }
        return resetOk;
    }
    else
    {
        NSLog(@"\nresetDatastore. Could not find the persistent store");
        return resetOk;
    }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*rra 6

你也可以拆掉堆栈(释放NSManagedObjectContext,NSPersistentStoreNSManagedObjectModel)并删除文件.可能比遍历整个数据库并单独删除每个对象更快.

此外,它们不太可能在将来提供此功能,因为它很容易删除该文件.但是,如果您认为重要,那么请提交雷达并告知Apple.否则他们不会知道有多少人想要这个功能.