2012-01-04 3 views
0

2つのビューを持つUITableViewControllerを設定しましたが、同じコアデータモデルに格納された異なるデータをロードするために各ビューを取得しました。しかし、今では、2つのテーブルのうちの1つで削除を実行しようとすると、それを保存していないようです。コードは次のとおりです。私は2番目のビューコントローラを追加するまでNSFetchedResultsControllersからタブに保存されないオブジェクトを削除する

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // Delete the row from the data source 
     NSManagedObject* itemToDelete = 
     [self.fetchedResultsController objectAtIndexPath:indexPath]; 

    [self.context deleteObject:itemToDelete]; 
    } 
    } 
} 

これはタブビューが使用する両方のビューコントローラのNSManagedObjectContextを設定Imが、その後、それぞれが尊重NSEntityDescriptionを使用して同じことをロードされているアプリのデリゲートで、うまくいきました同じコードを使用して削除します。

私の推測では、アプリのデリゲートか何かからコンテキストを共有するtheresの問題ですが、私は私が持っている他のどのようなオプションわからないんだけど....

助けてください!

答えて

0

NSManagedObjectContextを、メインスレッドでのみ相互作用する2つのオブジェクトにまたがって共有することは問題ありません。フェッチされた結果コントローラのそれぞれが、それぞれのビューコントローラに設定されたdelegateプロパティを持っており、適切なテーブルビューでreloadDataを呼び出すのと同じくらい簡単にcontrollerDidChangeContent:を処理していることを確認してください。

+0

よく私は、appleDateChangeContentメソッドのappleのボイラープレートコードを保存していました。[self.tableView endUpdates]; ...これは、私が1つのテーブルビューとNSFetchedResultsControllerを扱っているときに機能しました。セルを削除すると削除されますが、アプリケーションを閉じて再び開くと、元に戻ってくるので、コミットされていないかのようになります。 – JAManfredi

+0

ああ、大丈夫です。その場合は、 'applicationWillResignActive:'の中のあなたの管理対象オブジェクトのコンテキストで 'save'を呼び出してください。それまでは、あなたの変更のどれもバッキングストアにコミットされていません。 – warrenm

+0

ああ!私が1つのテーブルビューとNSFetchedResultsControllerだけを使用していたときに、なぜこれが(saveを呼び出さずに)動作していたのか、あなたは考えていますか?私はそれが2つのエンティティがそのdoesntの仕事に対処されているので、おそらく今、多分それが別のポイントでそれ自身をコミットするどこかを読んでいると思いますか?ちょっと興味があるんだけど! – JAManfredi

関連する問題