2012-03-17 10 views
2

私は、テーブルビューのNSFetchedResultsController表示する「場所」を持っているが、私は別のビューコントローラに表示されるべき場所のセットを更新するとき、私のFRCは、テーブルビューを更新しません。NSPredicateを追加すると、NSFetchedResultsControllerデリゲートが停止を停止するのはなぜですか?

これは一般的な問題です。私の特定のケースでは、すべてが正常に動作し、私はNSPredicateを削除(およびちょうどすべての場所を取得する)ときので、私のFRCをバックアップNSPredicateを中心に展開しているようです。

私のクエリは写真(私はCS193Pて働いています)と1対多の関係を持っている

@"ANY photos.isFavorite == %@", [NSNumber numberWithBool:YES] 

場所です。私のFRCは、関連するテーブルなどの変更を監視するように設定されていないのでしょうか?

私の状況に関する追加情報のビット:

  • 私が最初にアプリケーションをロードするとき、私の「場所」テーブルは、常に正確であると私のコアデータの更新とクエリが、大丈夫に見えます。
  • 私のFRC は、アプリケーションの負荷で既に存在している更新行を行います。実行時に新しい行/セクションを挿入するだけではありません。
  • 私はただ1つのMOCを使用しています。
  • My sectionNameKeyPath is not set to a transient attribute.
  • My cacheName is set to nil.

答えて

3

あなたのケースではわかりませんが、とにかく投稿します。たぶん有効な回避策かもしれません。

NSFetchedResultsController pitfall

はそれがお役に立てば幸いです。

+1

これはそれですね。レコードのために、FRCはフェッチしようとしているもの以外のエンティティの変更を受け取りません。この問題を回避するには、関係するエンティティ(私の場合は関連する* *)を手動で「ダーティ」にして、FRCにその変更が表示されるようにします。どうもありがとうございました! – ladenedge

+0

よろしくお願いいたします。 –

0
  • あなたの代わりに写真の写真1対1の関係を使用して、例えば、単純な述語をテストしてみましたか?

  • は「私のFRCは、テーブルビューを更新しません」 - あなたは-controllerDidChangeContent使用していますか:?それが呼び出されていないことを確認しましたか?私はドキュメントとは反対に、このメソッド内からtableViewのreloadDataを呼び出すことは安全ではないことを見てきました。これは、メソッドがメインスレッドではなくセカンダリで呼び出されるためです。

  • あなたは同じ(メイン?)スレッド上MOCに関連するすべての操作を実行していますか?

+0

単純な述語が実際に機能します。述語を完全に省略するか、* places *を厳密に扱う述語を使用すると(* photos *への結合を促すのではなく)、私は期待どおりにテーブルビューを更新します。 (あなたの他の2つの質問に答える:はい。) – ladenedge

0

代わりに、この述語を試してみてください?

+0

いいえ。 :-(私の最初のクエリと同じ振る舞い。 – ladenedge

関連する問題