我使用以下方法从 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。重新启动应用程序后,所有新对象都在 ArrayController 中(并出现在我的 tableView 中)
我检查了绑定(bind)是否以某种方式丢失,但一切都是正确的。
我做错了什么?我一定想念启动时发生的一些事情。但什么? o_O
(我启用了 ARC)
最佳答案
NSArrayController 绑定(bind)到 ManagedObjectContext。重置数据库时,您将 ManagedObjectContext 设置为 nil,然后您将分配一个新的 ManagedObjectContext。长话短说:重置后您需要绑定(bind)到新的 MOC。
关于objective-c - 从 CoreData 中删除所有对象后,NSArrayController 一直为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9259187/