Cora Data オブジェクトを表示するためのアプリを作成しています。アプリはエンティティを作成または削除するべきではありませんが、エンティティをお気に入りに追加する機会をユーザーに提供したいと考えています。そのために、ブール値の「isFavorite」属性を追加しました。ユーザーがエンティティを追加すると、次のように更新します。
[_currentObject setValue:[NSNumber numberWithBool:YES] forKey:@"isFavorite"];
[_managedObjectContext refreshObject:_currentObject mergeChanges:YES];
アプリが閉じたら、次のようにコンテキストを保存します。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[self saveContext];
}
- (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
NSLog(@"save done...");
}
それはうまく機能しますが、問題は、保存が完了するまでに約 10 秒かかることです。ユーザーがホーム ボタンを押してから (ホームボタンをダブルクリックして) アプリを閉じると、コンテキストは完全には保存されません。
コンテキストを保存するためのより高速な (または保存する) メソッドはありますか? 穴ファイルを再度保存する必要はありません。変更されたオブジェクトだけです...
私のファイルはバイナリで、サイズは約 5 MB で、データが追加されるにつれて大きくなります。