使用不带UITableViewController的NSFetchedResultsController

我遇到了尝试使用没有相应的UITableViewController的NSFetchedResultsController的问题。

根据苹果文件:

“NSFetchedResultsController旨在有效地管理从核心数据获取请求返回的结果,为UITableView对象提供数据。”

所以我首先研究了不使用UITableViewController的情况下使用NSFetchedResultsController是否明智,并且遇到这个Stackoverflow帖子,其中得出的结论是,至少在某些情况下,这不是一个坏主意。

但是现在我遇到了一个问题,当相应的UITableViewController不存在时,NSFetchedResultsController的行为会有所不同。 问题是当UITableViewController不存在时,由NSFetchedResultsController返回的对象没有IndexPath。 我已经在一个stackoverflow帖子中记录了这个问题。 (请注意,这是对问题的简化,在某些情况下,对象确实有IndexPath,但我遇到了足够的问题,认为在不使用UITableViewController的情况下期望IndexPath是一个坏主意。)

没有IndexPaths,我无法按排序顺序访问返回的对象,也无法访问特定的对象。 所以我在寻找的是一种让NSFetchedResults控制器返回带有IndexPath的对象的方法,或者一种访问对象的替代方法。 (或者我可能根本不应该使用NSFetchedResultsController?)

Re可选方法,一个解决方法是将fetchedObjects传递给数组,然后使用该数组。 但根据我的经验,创建FRC对象的新指针始终会导致问题。 我想每次我试图用我自己的指针保留一个NSManagedObject时,它最终导致了一个错误。

仅供参考,我试图创建一个类似于照片导航栏的导航栏。 如果您想象出您可以动态地将照片添加到Photos应用程序,那么对于栏中照片由NSFetchedResultsController进行管理是有意义的 - 这样添加新照片就会动态地添加到条的末尾,非常类似于如何将一个新对象动态添加到UITableView中。

感谢您能帮助我的任何想法!

更新此问题(暂时)通过使用 - [NSFetchedResultsController fetchedObjects] objectAtIndex:]解决


这是通过使用 - [NSFetchedResultsController fetchedObjects] objectAtIndex:]来解决的

NSFetchedResultsController的行为像一个托管对象的集合,类似于NSArray,这使得它易于使用。 事实上,它公开了一个名为fetchedObjects的只读属性,该属性的类型为NSArray,以使事情更容易访问它获取的对象。


使用-[NSFetchedResultsController fetchedObjects]有什么问题吗? 我不太清楚当你说你遇到问题并创建新指针并保留它们时你的意思 - 你能解释一下吗? 你通常不应该保留NSManagedObject (它们根据需要被提取并且发生故障),所以这可能是问题所在。


(请注意,这是对问题的简化,在某些情况下,对象确实有IndexPath,但我遇到了足够的问题,认为在不使用UITableViewController的情况下期望IndexPath是一个坏主意。)

UITableView和NSFetchedResultsController都使用NSIndexPath UIKit Additions扩展到NSIndexPath。 该扩展类生成具有显式节和行属性的indexPaths。 这些路径应使用以下方式手动创建:

+[NSIndexPath indexPathForRow:inSection:]

如果您使用其他方法创建indexPath,则接收方必须推断节和行属性。 他们通常会正确推断,但错误的可能性仍然存在。

链接地址: http://www.djcxy.com/p/36171.html

上一篇: Using an NSFetchedResultsController without a UITableViewController

下一篇: NSSortDescriptor should sort NSDates