搜索关系时NSPredicate for NSFetchedResultsController

时间:2014-05-30 22:50:29

标签: ios core-data nspredicate nsfetchedresultscontroller

我正在使用NSFetchedResultsController。我想在一个表中查看动物园中的所有狮子会,其中狮子是动物园的多对多关系。可能有成千上万的狮子会,所以我需要一个20的批量。

NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
        NSPredicate* predicate = ???

        NSEntityDescription* entity = [NSEntityDescription entityForName:@"Lion" inManagedObjectContext:context];
        [fetchRequest setEntity:entity];
        [fetchRequest setPredicate:predicate];

        [fetchRequest setFetchBatchSize:20];

如何设置谓词?我已经有了Zoo对象。我只需要所有的狮子会。

2 个答案:

答案 0 :(得分:0)

如您所知NSPredicate是一个指定如何获取或过滤数据的类。

NSFetchRequest有一个谓词属性,它指定了应该检索托管对象的逻辑条件。

以下是关于如何将其与核心数据结合使用的一个很好的示例 - http://nshipster.com/nspredicate/

答案 1 :(得分:0)

我将假设Zoo实体具有名为lions的关系。

Zoo *sanDiegoZoo = ...

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Lion"];

[request setPredicate:[NSPredicate predicateWithFormat:@"SELF IN %@", sanDiegoZoo.lions]];

[request setFetchBatchSize:20];

NSFetchResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.context sectionNameKeyPath:nil cacheName:nil];