从 CoreData 中删除所有对象后 NSArrayController 一直为空

Posted

技术标签:

【中文标题】从 CoreData 中删除所有对象后 NSArrayController 一直为空【英文标题】:NSArrayController keeps being empty after removing all objects from CoreData 【发布时间】:2012-02-13 10:51:00 【问题描述】:

我正在使用以下方法从 CoreData 中删除所有对象:

- (void)removeAllObjects:(id)sender
    [[self managedObjectContext] lock];
    [[self managedObjectContext] reset];
    NSPersistentStore *store = [[[self persistentStoreCoordinator] persistentStores] lastObject]; 

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

        if ([[self persistentStoreCoordinator] removePersistentStore:store error:&error])
        
            __persistentStoreCoordinator = nil;
            __managedObjectContext = nil;
            __managedObjectModel = nil;
            NSLog(@"storeUrl %@", storeUrl);


            if (![[NSFileManager defaultManager] removeItemAtPath:storeUrl.path error:&error])
            
                NSLog(@"\nresetDatastore. Error removing file of persistent store: %@",[error localizedDescription]);
            
            else
            
                NSLog(@"Recreating");
                //now recreate persistent store
               // [self persistentStoreCoordinator];
                [[self managedObjectContext] unlock];
            
        
        else
        
            NSLog(@"\nresetDatastore. Error removing persistent store: %@", [error localizedDescription]);
        
    
    else
    
        NSLog(@"\nresetDatastore. Could not find the persistent store");
    

一切似乎都很好。删除所有内容后,我可以再次添加新对象。但是新对象没有出现在绑定到 managedObjectContext 的我的 NSArraycontroller 中。重新启动应用程序后,所有新对象都在 A​​rrayController 中(并出现在我的 tableView 中)

我检查了绑定是否以某种方式丢失,但一切都是正确的。

我做错了什么?我必须错过启动时发生的一些事情。但是什么? o_O

(我已启用 ARC)

【问题讨论】:

哎呀,别叫它NSArrayControllerNSArray 是一种数据类型。 ControllerViewController 对象保留。 Em,但我说的是 NSArrayController。 developer.apple.com/library/mac/#documentation/Cocoa/Reference/… 【参考方案1】:

NSArrayController 绑定到 managedObjectContext。重置数据库时,您将 managedObjectContext 设置为 nil,然后您将分配一个新的 managedObjectContext。长话短说:您需要在重置后绑定到新的 MOC。

【讨论】:

听起来很明显^^ [scansArrayController bind:@"managedObjectContext" toObject:self withKeyPath:@"managedObjectContext" options:nil];谢谢!

以上是关于从 CoreData 中删除所有对象后 NSArrayController 一直为空的主要内容,如果未能解决你的问题,请参考以下文章

POST 请求后删除 CoreData 对象

Restkit 删除 coredata 中特定对象的所有对象

iPhone - 在删除 CoreData 中的对象后尝试保存新对象时应用程序崩溃

CoreData 中的删除不会删除;重新启动后出现已删除的对象

从 Coredata 中删除一个对象(出现错误)

从实体中删除属性后迁移 CoreData 时出错