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