4

対応する UITableViewController なしで NSFetchedResultsController を使用しようとすると問題が発生します。

アップルのドキュメントによると:

「NSFetchedResultsController は、Core Data フェッチ要求から返された結果を効率的に管理して、UITableView オブジェクトにデータを提供することを目的としています。」

そのため、UITableViewController なしで NSFetchedResultsController を使用することが推奨されるかどうかを最初に調査し、この Stackoverflow の投稿に遭遇して、少なくともいくつかの状況では、それは悪い考えではないと結論付けました。

しかし、対応する UITableViewController が存在しない場合、NSFetchedResultsController の動作が異なるという問題が発生しました。問題は、UITableViewController が存在しない場合、NSFetchedResultsController によって返されるオブジェクトに IndexPaths がないことです。この問題については、stackoverflow の投稿で文書化しました。(これは問題を単純化したものであることに注意してください。状況によっては、オブジェクトに IndexPaths がありますが、UITableViewController なしで IndexPathsを期待することは悪い考えであると信じるのに十分な問題に遭遇しました。)

IndexPaths がなければ、返されたオブジェクトにソート順でアクセスできず、特定のオブジェクトにアクセスできません。したがって、私が探しているのは、NSFetchedResults コントローラーが IndexPaths を持つオブジェクトを返すようにする方法、またはオブジェクトにアクセスする別の方法です。(または、NSFetchedResultsController をまったく使用すべきではないのでしょうか?)

別の方法としては、fetchedObjects を配列に渡してから、その配列を操作するという 1 つの回避策があります。しかし、私の経験では、FRC オブジェクトへの新しいポインターを作成すると、常に問題が発生します。自分のポインターで NSManagedObject を保持しようとするたびに、最終的にバグが発生したと思います。

参考までに、私が作成しようとしているのは、写真のナビゲーション バーに似たナビゲーション バーです。写真アプリケーションに写真を動的に追加できると想像した場合、バーの写真を NSFetchedResultsController で管理するのは理にかなっています。新しい写真を追加すると、バーの最後に動的に追加されます。 UITableView に新しいオブジェクトを動的に追加する方法。

あなたが私を助けることができるかもしれないアイデアをありがとう!

UPDATEこの問題は (暫定的に) -[NSFetchedResultsController fetchedObjects] objectAtIndex:] を使用して解決されます

4

3 に答える 3

4

これは、 -[NSFetchedResultsController fetchedObjects] objectAtIndex:] を使用して解決されます

NSFetchedResultsController は、NSArray に似た管理対象オブジェクトのコレクションとして動作するため、使いやすくなっています。実際、フェッチするオブジェクトへのアクセスをさらに簡単にするために、NSArray 型の fetchedObjects と呼ばれる読み取り専用プロパティを公開します。

于 2010-07-22T23:10:07.703 に答える
3

での作業に問題はあり-[NSFetchedResultsController fetchedObjects]ますか? 新しいポインターを作成して保持する際に問題が発生したと言うとき、あなたが何を意味しているのかよくわかりません.もっと説明してもらえますか? 通常、 s を保持する必要はありませんNSManagedObject(必要に応じてフェッチされ、フォールトされます)。それが問題になる可能性があります。

于 2010-07-18T22:50:39.230 に答える
1

(これは問題を単純化したものであることに注意してください。状況によっては、オブジェクトに IndexPaths がありますが、UITableViewController なしで IndexPaths を期待することは悪い考えであると信じるのに十分な問題に遭遇しました。)

UITableView と NSFetchedResultsController の両方が、NSIndexPath への NSIndexPath UIKit Additions 拡張機能を使用します。その拡張クラスは、明示的なセクションと行の属性を持つ indexPaths を生成します。これらのパスは、次を使用して手動で作成する必要があります。

+[NSIndexPath indexPathForRow:inSection:]

他の方法を使用して indexPath を作成する場合、受信者はセクションと行の属性を推測する必要があります。通常は正しく推論しますが、エラーの可能性は残ります。

于 2010-07-19T14:27:56.783 に答える