【发布时间】:2012-03-05 19:20:02
【问题描述】:
当我更新我的应用程序时,我在启动时使用我的 CoreData 模型做一些事情,然后我将持久存储使用的 .sqlite 文件替换为:
NSArray *stores = [__persistentStoreCoordinator persistentStores];
for(NSPersistentStore *store in stores) {
[__persistentStoreCoordinator removePersistentStore:store error:nil];
[[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:nil];
}
__persistentStoreCoordinator = nil;
[self persistentStoreCoordinator];
__managedObjectContext = nil;
[self managedObjectContext];
一切正常,就像它应该做的那样。但是当我通过主页按钮关闭应用程序时,它会崩溃:
[NSPersistentStoreCoordinator retain]: message sent to deallocated instance
我正在使用 ARC ...实际上你可以说它没关系,因为它在关闭时会崩溃,所以你不会注意到崩溃。但是,当然,这不是一个选择,必须有正确的方法来做到这一点!?
有什么想法吗?为什么会有一个保留发送到NSPersistenStoreCoordinator?它与__persistentStoreCoordinator = nil; 有关,但我需要将其置零,否则它不会使用新的.sqlite。
干杯!
【问题讨论】:
-
带下划线的 ivar 名称的意义在于让您在不应该使用它们时清楚地看到它们,例如因此,当您打算键入 self.managedObjectContext 时,不要键入 managedObjectContext。这可能与您的问题有关。另外,您的非返回访问器类型方法是做什么的?例如
[self managedObjectContext]就在自己的线路上?
标签: ios core-data automatic-ref-counting nsmanagedobjectcontext