概要
- Coreデータを使用しているiOSプロジェクトがあります
- オブジェクトを挿入しているので、それを保存したいと思います。
- 保存が機能するかどうかはわかりません。
- アプリがバックグラウンドになると、保存が機能しているようです
- シミュレータを使用しているときに、Xcodeの[停止]ボタンをクリックすると、保存が機能していないようです。
質問
- 保存は実際に行われていますか?
- ビューベースのアプリを作成したために問題が発生していますか(コアデータのチェックボックスが利用できませんでした)?
従う手順
- 私はそれをテストするためにシミュレーターを使用しています。
- オブジェクトを挿入します(コードは次のセクションにあります)
- 挿入したオブジェクトを保存します(コードは次のセクションにあります)
- Xcodeの停止ボタンを押してアプリの実行を停止します
出力に気づいた
setBeforeSave.count = 1
setAfterSave.count = 0
- 保存する前に、
NSManagedObjectContext
メソッドinsertedObjects
は1つのオブジェクトを返します - 保存する前に、
NSManagedObjectContext
メソッドinsertedObjects
は0個のオブジェクトを返します - Xcodeの停止ボタンが押されたとき、およびアプリが再起動されたとき、以前のデータは利用できません(xcodeで停止をクリックしたためです)
- managedObjectContextはnilではありません
NSManagedObjectContext
メソッドはをsave:
返しますYES
。
オブジェクトを挿入するコード
Test *test = [NSEntityDescription insertNewObjectForEntityForName:@"Test" inManagedObjectContext:self.database.managedObjectContext];
保存するコード:
//database is a property of the type UIManagedDocument
NSSet *setBeforeSave = [self.database.managedObjectContext insertedObjects];
NSLog(@"setBeforeSave.count = %i", setBeforeSave.count);
NSError *error = nil;
if(![self.database.managedObjectContext save:&error])
NSLog(@"error = %@", error);
NSSet *setAfterSave = [self.database.managedObjectContext insertedObjects];
NSLog(@"setAfterSave.count = %i", setAfterSave.count);