objective-c - 从 CoreData 中删除所有对象后,NSArrayController 一直为空

标签 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 中,它绑定(bind)到了 ManagedObjectContext。重新启动应用程序后,所有新对象都在 A​​rrayController 中(并出现在我的 tableView 中)

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

我做错了什么?我一定想念启动时发生的一些事情。但什么? o_O

(我启用了 ARC)

最佳答案

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

关于objective-c - 从 CoreData 中删除所有对象后,NSArrayController 一直为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9259187/

相关文章:

ios - 在 iOS 10 或更低版本中,当它处于后台或处于打开状态时从应用程序获取来电号码?

ios - 如何将 SuperClass 对象转换为 SubClass [objective -c]

cocoa - 核心显卡0x1​​04567911

ios - 根据选定的 TableView 行更新 UILabel

objective-c - 如何在消息框中显示文本框objective-c

iphone - Mac 相当于 UIBarButtonSystemItemAction

objective-c - 将版本号附加到 NSKeyedArchive

ios - RestKit - 到同一实体的关系映射创建无限循环

ios - 将 NSManagedObject 的关系更改为不同的上下文

objective-c - 将 KVO 添加到 UITableViewCell