1

NSFetchedResultsControllerを使用せずに、(参照されたプロパティを介して)セクションを使用することを含め、コアデータモデルからのデータをUITableViewに効率的に提供する方法の例を誰かが持っていますか?

NSFetchedResultsControllerが利用可能になる前に、これはどのように行われましたか?理想的には、サンプルは表示されているデータのみを取得し、必要に応じて追加のリクエストを行う必要があります。

ありがとう、

ティム

4

1 に答える 1

0

記録として、私はCommaToastに同意します。これは、の代替バージョンを実装する理由がせいぜい非常に限られているということですNSFetchedResultsController。確かに、私がそうすることを提唱する機会を考えることはできません。

そうは言っても、教育の目的で、私は次のことを想像します。

  • 作成時に、管理対象オブジェクトコンテキストに対してNSFetchedResultsController関連を実行して、初期結果セットを作成します。NSFetchRequest
  • NSManagedObjectContextObjectsDidChangeNotification続いて(デリゲートがある場合)、管理対象オブジェクトのコンテキストからリッスンします。その通知を受信すると、結果セットを更新します。

フェッチ要求は述語の上にあり、述語は常にそれらが参照するキーに分解できるとは限りません(たとえば、を介して作成した場合predicateWithBlock:)。さらに、挿入および削除されたリストは非常に明示的ですが、変更されたオブジェクトのリストは、それらのオブジェクトがどのように変更されたかについての手がかりを提供しません。したがって、フェッチ要求で指定された述語を、変更されたレコードと挿入されたレコードの組み合わせセットに対して再実行し、結果を適切に累積して、以前に結果と見なした削除されたセットからすべてを削除すると思います。

フェッチ制限のあるフェッチ要求を処理するときはいつでも、おそらくもっと効率的なことができます。明らかな観察、私の頭のてっぺんからまっすぐに:

  • すでに十分なオブジェクトがある場合、それらのいずれも削除または変更されておらず、新しく挿入または変更されたオブジェクトのいずれも、以前のオブジェクトよりも高いソート位置を持っていません。明らかに、伝播する変更はなく、新しいクエリを実行する必要はありません。
  • 持っていたオブジェクトの一部を失ったとしても、どちらか低い方を維持すると、変更されなかったものすべてに上限があります。したがって、変更して挿入したオブジェクトと、すでに持っているオブジェクトを一緒にすると、さらに多くのオブジェクトが作成されます。そうすれば、新しいクエリを回避することもできます。

論理的な拡張は、削除、挿入、および変更によってソート済みリストが変更され、指定されたフェッチ制限に切り詰める前に、管理対象オブジェクトのコンテキストを再問い合わせする必要があるように思われます。一番下のオブジェクトは、前回持っていたものではありません。理由は、挿入や変更に対して、保持していない保存されたオブジェクトについてはまだ何も知らないということです。あなたはあなたが以前持っていたものと比較してあなたが持っていないものがどのようにあるかについて知っているだけです。

于 2012-07-20T02:09:30.563 に答える