我使用魔法记录从核心数据中获取数据,使用代码:
- (NSFetchedResultsController *)fetchedResultsController {
if (!_fetchedResultsController ) {
_fetchedResultsController = [TagItem MR_fetchAllGroupedBy:nil withPredicate:nil sortedBy:@"name" ascending:YES delegate:self];
}
return _fetchedResultsController;
}
问题是,它正在填充由另一个表视图控制器推送到的表视图控制器,因此基本上用户选择一个选项将该人带到数据列表,但该选项中的数据特定于那个选择。所以我想要做的只是获取分配给该选项的数据,而不是简单地显示所有可用数据。我上面的方法只允许我获取所有数据,而不是根据选项选择特定数据。选项中的数据被赋予选项本身的objectId作为实体,从而提供两者之间的关系。
所以我的问题是,如何使用魔法记录根据特定实体获取数据?
更新
我已经尝试将谓词设置为特定值,只是为了测试它是否有效,认为它只是单独处理核心数据一样,但我只是得到一个错误。
- (NSFetchedResultsController *)fetchedResultsController {
if (!_fetchedResultsController ) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = test"];
_fetchedResultsController = [TagItem MR_fetchAllGroupedBy:nil withPredicate:predicate sortedBy:@"name" ascending:YES delegate:self];
}
return _fetchedResultsController;
}
错误如下,即使我确定存在名称test存储的数据项,但它似乎不起作用。
'NSInvalidArgumentException',原因:'无法为谓词生成SQL(名称==测试)(RHS上的问题)'
答案 0 :(得分:4)
这就是withPredicate
参数的用途:
NSPredicate *predicate = ... // predicate that filters the items to display
_fetchedResultsController = [TagItem MR_fetchAllGroupedBy:nil withPredicate:predicate ...];
例如,如果 TagItem 与 Person 之间存在一对一关系person
,那么
Person *person = ...; // person selected in the first view controller
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"person = %@", person];
_fetchedResultsController = [TagItem MR_fetchAllGroupedBy:nil withPredicate:predicate ...];
会获取与该人相关的所有项目。