0

私は私のアプリを更新すると、私は起動時に私のCoreDataモデルといくつかのものをやって、その後、私は永続ストアがで使用しています.sqliteファイルを置き換えを引き起こしそれは訴えかかっているようにうまく動作します。しかし、私はhomebutton経由でアプリを閉じると、クラッシュ:CoreData:</p> <p>すべて:置き換え.sqliteがクラッシュ

[NSPersistentStoreCoordinator retain]: message sent to deallocated instance 

私はARCを使用しています...実際には閉じられているときにクラッシュするので、それは、問題ではありませんので、あなたがいないと言うことができますクラッシュに気づく。しかし、もちろん、それはオプションではないし、それを行う正しい方法がなければなりません!

アイデア?何故代金はNSPersistenStoreCoordinatorに送られますか?それは__persistentStoreCoordinator = nil;と関係がありますが、私はそれを必要としません。そうでなければ、新しい.sqliteを使用しません。

乾杯!

+0

下線IVAR名のポイントは、それが明らかにすることですあなたはそうしてはいけないときにそれらを使用しています。 self.managedObjectContextとタイプするときはmanagedObjectContextと入力しないでください。これはあなたの問題に関係するかもしれません。また、戻り値のないアクセサ型のメソッドは何をしますか?例えば'[self managedObjectContext]'をそれ自身の行に置くだけですか? – jrturton

答えて

3

はまあfinaly私はpersistentStoreCoordinator nilになくても、.sqlite & storeCoordinatorのストアを交換するためのより良い(と作業)方法を見つけた:

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

あなたは私がどれくらい助けてくれたか分かりません。私はあなたにハグの男を与えるだろう。どうもありがとうございます。 –