从CoreData中删除所有对象后,NSArrayController保持为空

时间:2012-02-13 10:51:01

标签: objective-c cocoa core-data nsarraycontroller

我正在使用以下方法从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");
    }
}

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

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

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

(我启用了ARC)

1 个答案:

答案 0 :(得分:2)

NSArrayController绑定到managedObjectContext。重置DB时,将managedObjectContext设置为nil,然后分配新的managedObjectContext。长话短说:重置后你需要绑定到新的MOC。