3

NSFetchedResultsController に問題があります。これは、IncludesPendingChanges をオンにすることで修正されるようです。これが心配です。(保留中の変更が役に立たないことを含め、これは真実ではないことがわかりました。)

Fetched Results Controller は、完全な API リフレッシュでオブジェクトを正しくフェッチして表示します。段階を踏んで、この完全な API 更新の一時的なコンテキストが保存され、エラーなしでマージされることを確認しました。

ただし、別のナビゲーション フローから同じフェッチ リクエストを実行するビューに戻ると、オブジェクトの完全なセットではなく、部分的に完成したオブジェクトが 1 つだけ返されて表示されます。この時点で完全な API 更新を行うと、更新によって正しいオブジェクトが表示されます。

私の問題は、mergeChangesFromContextDidSaveNotification がメイン コンテキストに伝播されていない可能性があると考えていますが、ログとステップスルーから、正しく保存されているようです。ここからどこへ行けばいいのかわからない。includesPendingChanges で症状は修正されますが、根本的な問題が修正されるとは思えません。

追加情報として、コア データ管理にこのフレームワークを使用しています: https://github.com/vokalinteractive/CoreDataManager-iOS

VIFetchedResultsController.m の 156 行目に追加して、includesPendingChanges を有効にしています。

 [fetchRequest setIncludesPendingChanges:YES]

編集どのようなまぐれでも、includesPendingChanges を YES に修正すると、問題はもはや存在しないと私が信じるようになりました。このプロジェクトには非常に毛むくじゃらのメモリ管理が含まれていたことが判明しました。一日中それを片付けた後でも、私はまだこの作業を行うにはほど遠い状態です。それでも同じ時点で、変更がメイン データストアに反映されていないか、保持されていないようです。

ヒントとして、以下のコメントで述べたように、「includePendingChanges:YES」を指定した場合でも、フェッチしたオブジェクトを次のようにログアウトします。

[self.fetchedResultsController.fetchedObjects description]

「includesPendingChanges: NO」で終わります。何がこれを引き起こす可能性がありますか?

4

1 に答える 1

6

おそらく、あなたはそれを間違った方法で手に入れました。のデフォルトはincludesPendingChangesですYES。これは通常必要な動作です。UI の更新が破損することは、ある程度予想されます。

この属性を に設定することは、特にデータベース レベルで処理できる単純な集計を含める場合に、 でのNOフェッチを容易にすることを目的としています。NSDictionaryResultType

これは決してあなたのエラーではなく、使用しているフレームワークの欠陥である可能性があると思います。とにかく、あなたが問題として認識しているのは、実際には予想される動作です。

これが非常によく説明されているドキュメントの2つの短い段落を参照してください。

于 2013-01-14T19:31:18.420 に答える