使用托管对象中的集合作为获取结果控制器的数据
Posted
技术标签:
【中文标题】使用托管对象中的集合作为获取结果控制器的数据【英文标题】:Use a set from a managed object as data for a fetched results controller 【发布时间】:2011-04-18 03:44:02 【问题描述】:我想制作一个导航界面,用户可以在其中点击一个单元格并拥有一个与前一个相同的新导航控制器。我的托管对象具有以下结构:
name (string)
orderId (int)
orderBy (string, a key path indicating what to order the table with)
dateCreated (date)
items (a relationship pointing to the items for the next table)
在点击具有非零项目的项目时,下一个控制器获取对被点击项目的引用并使用其“items”、“orderBy”和“orderId”来构造一个获取的结果控制器(将其项目作为数据) 和一个排序描述符(使用 orderBy 和 OrderId)。
如何告诉 fetched results controller 使用 items 返回的 NSSet
作为其数据?我可以使用谓词将结果限制为仅一个对象的项目吗?谢谢
【问题讨论】:
【参考方案1】:您的项目需要具有反向多对一关系。让我们称这种关系为“父”。
在您的 tableView 委托的 didSelectRowAtIndexPath: 中,启动一个新的视图控制器,并在所述 indexPath 处传递“父”对象。您将需要创建一个访问器来将所述对象保存在下一个视图控制器中。
正如您正确猜测的那样,您可以创建一个谓词,以便您的 fetchedResultsController 只返回所说的“项目”。让您获取的结果仅搜索“item”实体。
NSPredicate *resultsPredicate = [NSPredicate predicateWithFormat:@"parent == %@", parentObject];
[fetchRequest setPredicate:resultsPredicate];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:[parentObject valueForKey:@"orderBy"] ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
基本上,您正在搜索与您选择的对象具有父关系的所有“项目”。
如果我描述得当,请告诉我(对不起,如果我没有正确描述,但我自己这样做,并且可以指向一个 Apple 示例)。
编辑:Apple 示例代码
http://developer.apple.com/library/ios/#samplecode/CoreDataBooks/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008405
http://developer.apple.com/library/ios/#samplecode/iPhoneCoreDataRecipes/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008913
【讨论】:
谢谢,效果很好。您能否也发布指向 Apple 示例代码的链接,以便我学习他们的技术。 抱歉耽搁了。我已经添加了链接。以上是关于使用托管对象中的集合作为获取结果控制器的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 NSPredicate 过滤 Core Data 托管对象?