4

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

根据苹果的文件

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

因此,我首先研究了在没有 UITableViewController 的情况下使用 NSFetchedResultsController 是否可取,并遇到了这篇 Stackoverflow 帖子,得出的结论是,至少在某些情况下,这不是一个坏主意。

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

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

重新替代方法,一种解决方法是将 fetchedObjects 传递给数组,然后使用该数组。但根据我的经验,创建指向 FRC 对象的新指针总是会导致问题。我认为每次我尝试使用自己的指针保留一个 NSManagedObject 时,它最终都会导致一个错误。

仅供参考,我正在尝试创建一个导航栏,类似于照片中的导航栏。如果你想象你可以动态地将照片添加到 Photos 应用程序中,那么将栏中的照片由 NSFetchedResultsController 管理是有意义的——这样添加的新照片将被动态添加到栏的末尾,就像添加新对象如何动态添加到 UITableView。

感谢您提供任何可以帮助我的想法!

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

4

3 回答 3

4

这可以通过使用 -[NSFetchedResultsController fetchedObjects] objectAtIndex:] 来解决

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

于 2010-07-22T23:10:07.703 回答
3

与 合作有什么问题-[NSFetchedResultsController fetchedObjects]吗?当您说您在创建新指针并保留它们时遇到问题时,我不太确定您的意思——您能解释更多吗?您通常不必保留NSManagedObjects (它们会根据需要被提取和出错),所以这可能是问题所在。

于 2010-07-18T22:50:39.230 回答
1

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

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

+[NSIndexPath indexPathForRow:inSection:]

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

于 2010-07-19T14:27:56.783 回答