2012-03-18 12 views
0

私はcoredataをsqlite DBと一緒に使ってアプリケーションにデータを保持しています。しかし、私は私のアプリを殺すたびに、私はDBに保存されているすべてのデータを失う。私はかなり確信している。なぜなら私のDBの.sqliteファイルはちょうど私のアプリケーションが起動するたびに新鮮なものに置き換えられているが、私はちょうどそこに既存のものを使用するコードを見つけることができないようだ。 誰かが私のためにこれを扱うことができるいくつかのコードに向けて私を指し示すことができれば素晴らしいだろう。iOS 5 - Coredata Sqlite DBがアプリケーションを終了した後にデータを失う

乾杯

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
if (__persistentStoreCoordinator != nil) 
{ 
    return __persistentStoreCoordinator; 
} 

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber  numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];  
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"FlickrCoreData.sqlite"]; 

NSError *error = nil; 
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) 
{ 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
}  

return __persistentStoreCoordinator; 
} 
+0

ストアに書き込むときはいつも、同じManagedObjectContextを使用する必要があります。どのようにデータをmocに書き込むのですか、ManagedObjectContextを他のコントローラにどのように渡していますか? –

答えて

3

コアデータ内の管理対象オブジェクトコンテキストの変更は、最適化の目的で変更した時点で保存されません。このようにして、コンテキストに一連の変更を加え、すべての変更を一度に永続化することができます。したがって、自動保存する前にアプリを終了させると、すべてのデータが失われます。私はあなたがここで経験していることを推測しています。

いずれにしても、アプリを終了する前に明示的にデータを保存するように呼び出してみてください。これはあなたの問題を解決するはずです。アプリを閉じる前に、あなたのコードのどこかに次の呼び出しを行うことによって、あなたのコンテキストを保存することができcontextと呼ばれる管理対象オブジェクトコンテキストを保持する変数を持っていると仮定すると例えば

、:

[context save:&error]または単に[context save:nil]

+0

こんにちはJake、私のAppDelegateは、applicationDidTerminateメソッドからコンテキスト上でsaveを呼び出します。これはあなたが意味することですか? –

+0

はい、あなたのプログラム構造に最適なものに応じて、あなたが決めるべきであるので、セーブコールをどこに置くべきかを正確に伝えたくありませんでした。しかし、私はそれを 'Will ...'デリゲートメソッドの一つ、つまり 'applicationWillTerminate'に入れておけば、プログラムに実際にセーブする時間を与えることができます。 –

+1

ありがとう。私は実際に '[context save:&error]'を 'applicationDidEnterBackground'から呼び出さなければなりませんでした。 "あなたのアプリケーションがバックグラウンドでの実行をサポートしている場合、このメソッドはapplicationWillTerminateの代わりに呼び出されます:ユーザーが終了するとき。 –

1

Bは、あなたがappDelegate機能applicationWillTerminate:で行わ[self saveContext]を試してみました。アプリケーションを終了する前に、コンテキストを保存する必要があります。

+0

ねえ。ええ、そのコードはすでにあります。 –

+0

このコードは何ですか? 'NSDictionary * options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES]、NSMigratePersistentStoresAutomaticallyOption、[NSNumber numberWithBool:YES]、NSInferMappingModelAutomaticallyOption、nil];'デフォルトのものはnilだと思いますか? – Lunayo

+0

データモデルのバージョンを更新するときにデータの移行を処理します。私はオプションの代わりに値としてnilを試しましたが、違いはありません。 –

関連する問題