2012-03-14 4 views
6

NSFetchedResultsControllerを使用してテーブルデータソースを設定して管理しています。ユーザーが特定の行を選ぶときいくつかの属性を変更すると、手動でNSFe​​tchedResultsControllerの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 

答えて

6

。コンテキストをストアに手動で保存する必要があります。 NSFetchedResultsControllerはコンテキストからデータを取得しますが、データをストアに保存しません。

+0

したがって、 'didChangeObject'デリゲートメソッドの内部に保存することは悪い考えではありませんか? – Pieter

+1

これを実行した場合、ループが発生する可能性があります。 NSFetchedResultsControllerデリゲートメソッドは、モデルではなくビューを更新するために使用されます。したがって、何かがコンテキストに保存されると、ビューはそれに応じて更新されます(基本的に、テーブルビューを再ロードする必要はありません)。デリゲートメソッドのコンテキストに保存する場合、デリゲートメソッドは、コンテキストの変更を認識するため、起動します。 – Gobot

+0

解決策は何ですか? – fatuhoku

関連する問題