使用Core Data中的NSPredicate访问对象

时间:2014-01-25 02:01:10

标签: ios iphone core-data nspredicate

我试图找到我的简单问题的答案,没有运气......我正在研究CoreData,我有两个实体让我们举一个“照片和摄影师”的例子一对多的关系,意味着一个摄影师可以有多个照片......现在我用

存储了对象
[NSEntityDescription insertNewObjectForEntityForName...]

我在检索特定摄影师的“所有照片”时遇到问题。我正在使用此代码

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Photographer"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name = %@",@"photographerName"];
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"timeStamp" ascending:YES]];

这段代码正在回归摄影师,但我只需要这位摄影师拍摄的所有照片。 我是CoreData的新手,我不确定我是否应该使用“照片”实体?

提前感谢。

2 个答案:

答案 0 :(得分:0)

您的获取请求应该请求Photo实体。

然后,在你的谓词中,你可以像这样指定摄影师的名字:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"photographer.name = %@",@"photographerName"];

或者更好的是,首先获得摄影师对象,然后在谓词中测试关系会快得多:

Photographer* photographer = ... //Get required photographer here
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"photographer = %@", photographer];

答案 1 :(得分:0)

使用此选项对photographer.photos数组进行排序。

NSSortDescriptor *sortKey = [[NSSortDescriptor alloc] initWithKey:@"timestamp" ascending:YES];
NSArray *sorters = [NSArray arrayWithObject:sortKey]; 
NSArray *sortedArray = [photographer.photos sortedArrayUsingDescriptors:sorters];