我在尝试使用没有相应UITableViewController的NSFetchedResultsController时遇到了问题。
根据苹果documentation:
“NSFetchedResultsController旨在有效地管理从Core Data获取请求返回的结果,以便为UITableView对象提供数据。”
所以我首先研究了在没有UITableViewController的情况下使用NSFetchedResultsController是否可行并遇到this Stackoverflow post,其中得出的结论是,至少在某些情况下,这不是一个坏主意。
但是现在我遇到了一个问题,当相应的UITableViewController不存在时,NSFetchedResultsController的行为会有所不同。问题是当UITableViewController不存在时,NSFetchedResultsController返回的对象没有IndexPaths。我在stackoverflow post中记录了这个问题。 (注意这是问题的简化,在某些情况下对象确实有IndexPaths,但是我遇到了足够的问题,认为期望没有UITableViewController的IndexPaths是一个坏主意。)
没有IndexPaths,我无法按排序顺序访问返回的对象,也无法访问特定对象。所以我要找的是获取NSFetchedResults控制器以返回具有IndexPaths的对象的方法,或者是访问对象的替代方法。 (或者我可能根本不应该使用NSFetchedResultsController?)
重新替代方法,一种解决方法是将fetchedObjects传递给数组,然后使用该数组。但根据我的经验,创建FRC对象的新指针总会导致问题。我想每当我尝试用自己的指针保留NSManagedObject时,它最终都会导致错误。
仅供参考,我想创建的是一个类似于照片中导航栏的导航栏。如果您想象可以动态地将照片添加到照片应用程序中,那么条形图中的照片将由NSFetchedResultsController管理是有意义的 - 这样添加新照片就会动态添加到条形的末尾,就像如何添加新对象动态添加到UITableView。
感谢您提供帮助我的任何想法!
UPDATE 这个问题(暂时)通过使用 - [NSFetchedResultsController fetchedObjects] objectAtIndex:]
来解决答案 0 :(得分:4)
这是通过使用 - [NSFetchedResultsController fetchedObjects] objectAtIndex:]来解决的。
NSFetchedResultsController表现为托管对象的集合,类似于NSArray,使其易于使用。实际上,它公开了一个名为fetchedObjects的只读属性,该属性的类型为NSArray,以便更容易访问它所获取的对象。
答案 1 :(得分:3)
使用-[NSFetchedResultsController fetchedObjects]
时有什么问题吗?当你说你遇到问题创造新的指针并保留它们时,我不太清楚你的意思 - 你能解释一下吗?您通常不应该保留NSManagedObject
(它们根据需要被取出和出现故障),这可能是问题所在。
答案 2 :(得分:1)
(注意这是简化 问题,在某些情况下 对象确实有IndexPaths,但我已经 遇到了足够的问题要相信 期待没有的IndexPaths UITableViewController是一个坏主意。)
UITableView和NSFetchedResultsController都使用NSIndexPath的NSIndexPath UIKit Additions扩展。该扩展类生成具有显式section和row属性的indexPaths。应使用以下方法手动创建这些路径:
+[NSIndexPath indexPathForRow:inSection:]
如果使用其他方法创建indexPath,则接收方必须推断section和row属性。他们通常会正确地推断,但错误的可能性仍然存在。