0

当我更新我的应用程序,我做一些东西与我的CoreData在启动模式和事后我更换持久化存储与使用.sqlite文件:CoreData:更换.sqlite导致崩溃

一切工作得很好,就像它所处的那样。但是,当我通过为homeButton关闭应用程序,它崩溃:

[NSPersistentStoreCoordinator retain]: message sent to deallocated instance 

我使用ARC ...其实你可以说这不要紧,因为它崩溃被关闭的时候,让你不注意事故。但是,当然,这不是一种选择,必须有一个正确的方法来做到这一点!?

任何想法?为什么有保留寄给NSPersistenStoreCoordinator?它与__persistentStoreCoordinator = nil;有关,但我需要删除它,否则它不会使用新的.sqlite。

干杯!

+0

下划线伊娃名字的要点是使其明显,你不应该使用它们,例如所以当你打算输入self.managedObjectContext时,你不要输入managedObjectContext。这可能与你的问题有关。另外,你的非返回访问器类型方法是做什么的?例如'[self managedObjectContext]'就在它自己的路线上? – jrturton 2012-03-07 16:17:07

回答

3

好finaly我发现了一个更好的(和工作)的方式来代替.sqlite & storeCoordinator的商店,而不需要先nil persistentStoreCoordinator:

NSArray *stores = [__persistentStoreCoordinator persistentStores]; 

for(NSPersistentStore *store in stores) { 
    [__persistentStoreCoordinator removePersistentStore:store error:nil]; 
    [[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:nil]; 
} 

NSString *storePath = [[self applicationDocumentsDirectoryString] stringByAppendingPathComponent:@"PictureApp.sqlite"]; 

NSURL *storeUrl = [NSURL fileURLWithPath:[[self applicationDocumentsDirectoryString] stringByAppendingPathComponent:@"PictureApp.sqlite"]]; 

NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"PictureApp" ofType:@"sqlite"]; 
if (defaultStorePath) { 
    [[NSFileManager defaultManager] copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; 
} 

NSError *error = nil; 
[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]; 
+0

你不知道你有多少帮助我..谢谢一吨。我会给你一个拥抱的人。非常感谢。 – 2014-01-06 16:31:17