我想创建一个导航界面,用户可以点击一个单元格,并拥有一个与前一个相同的新导航控制器。我的托管对象具有以下结构:
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)。
如何告诉提取的结果控制器使用项目返回的NSSet
作为数据?我可以使用谓词将结果限制为仅一个对象的项目吗?感谢
答案 0 :(得分:1)
您的物品需要具有相反的多对一关系。让我们称这种关系为“父母”。
在tableView委托的didSelectRowAtIndexPath:中,启动一个新的视图控制器,并在所述indexPath处传递“父”对象。您需要创建一个访问器来将所述对象保存在下一个视图控制器中。
正如您所猜测的那样,您可以创建一个谓词,以便您的fetchedResultsController仅返回所说的“项目”。使您获取的结果仅搜索“项目”实体。
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示例代码