2010-07-18 39 views
4

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

根据苹果documentation

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

因此,我首先研究了如果不使用UITableViewController而使用NSFetchedResultsController是否可取,并且遇到this Stackoverflow post,那么得出的结论是,至少在某些情况下,这不是一个坏主意。

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

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

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

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

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

UPDATE这个问题(暂定)通过求解 - [NSFetchedResultsController fetchedObjects] objectAtIndex:]

回答

4

这是通过使用求解 - [NSFetchedResultsController fetchedObjects] objectAtIndex:]

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

3

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

+0

This [stackoverflow post of mine](http://stackoverflow.com/questions/2375551/nsmanagedobjects-that-i-own-being-released-by-main-m)是关于一个问题,其中的对象会得到自发释放(运行5分钟左右后)。但是我遇到了类似的问题,在NSManagedObject处指向一个保留的指针,当它稍后需要时它不会在那里。 虽然我很困惑,但是“使用 - [NSFetchedResultsController fetchedObjects]” - 听起来像你建议直接使用它,但是你建议新的指针,这意味着间接与它们合作? – robenk 2010-07-18 23:11:51

+0

我可能会得到你所说的,你可以进行读取,将结果放入一个数组中,与数组一起工作然后释放它(即不保留任何东西,我的经验使我认为它可以正常工作)。但是,你会不断地进行提取和创建阵列到处都是不正确的地方。让我知道如果我错过了你的意思。 – robenk 2010-07-18 23:15:36

+0

哦废话,“ - [NSFetchedResultsController fetchedObjects] objectAtIndex:”如果这样的作品,我会觉得愚蠢 – robenk 2010-07-18 23:20:31

1

(请注意,这是 问题的简化,在某些情况下, 对象确实有IndexPaths,但我已经遇到 足够的问题相信 是期待IndexPaths没有 的UITableViewController是一个坏主意。)

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

+[NSIndexPath indexPathForRow:inSection:]

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

+0

很酷,感谢您指出特殊的NSIndexPath方法。我不知道它的存在。 – robenk 2010-07-20 03:42:28

相关问题