NSFetchedResultsControllerを使用してテーブルデータソースを設定して管理しています。ユーザーが特定の行を選ぶときいくつかの属性を変更すると、手動でNSFetchedResultsControllerのmanagedObjectContextを保存する必要がありますか?
は、actionsheetがポップアップ表示し、ユーザーがその行の値を変更することができます:
NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:selectedRowIndexPath];
[managedObject setValue:status forKey:@"status"];
これは本当によく働くと私はテーブルビューに変更をすぐに見ることができます。これは、NSFetchedResultsControllerが何かが変更されていることを知っているため、そのtableviewcellをリロードします。アプリケーションを停止して終了すると(完全に)、再度開くと、変更は保存されません。
私はNSFetchedResultsConrollerが変更を保存していると思います。
変更するたびに次のコードを使用して手動で保存する必要がありますか?
// Save the context.
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
それとも、このコードを呼び出す:あなたは正しいです
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
したがって、 'didChangeObject'デリゲートメソッドの内部に保存することは悪い考えではありませんか? – Pieter
これを実行した場合、ループが発生する可能性があります。 NSFetchedResultsControllerデリゲートメソッドは、モデルではなくビューを更新するために使用されます。したがって、何かがコンテキストに保存されると、ビューはそれに応じて更新されます(基本的に、テーブルビューを再ロードする必要はありません)。デリゲートメソッドのコンテキストに保存する場合、デリゲートメソッドは、コンテキストの変更を認識するため、起動します。 – Gobot
解決策は何ですか? – fatuhoku