根据特定实体获取数据

时间:2013-08-12 14:05:30

标签: ios objective-c core-data nsfetchedresultscontroller magicalrecord

我使用魔法记录从核心数据中获取数据,使用代码:

- (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上的问题)'

1 个答案:

答案 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 ...];

会获取与该人相关的所有项目。