Coredata获取NSSet的谓词

时间:2014-08-21 20:55:04

标签: ios objective-c core-data nspredicate nsset

我有一个ManagedPhoto coredata对象,它包含一个名为tags的NSSet属性。标记集中的每个对象都是NSString。

我需要获取所有具有特定值标签的ManagedPhoto对象,比如'party'。这就是我正在做的事情 -

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"ManagedPhoto"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SELF.tags == 'party'"];
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];

但是我总是得到一个空的结果数组,即使我确定有ManagedPhotos标签包含'party'。我也尝试过这个 -

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SELF.tags IN %@", @[@"party"]];

我也尝试了很多其他的东西,但到目前为止还没有任何工作!有什么想法吗?

1 个答案:

答案 0 :(得分:6)

要获取具有至少一个带有指定值的标记的对象,以下谓词应该可以使用

[NSPredicate predicateWithFormat:@"ANY tags == 'party'"]

或更好

[NSPredicate predicateWithFormat:@"ANY tags == %@", @"party"]

但我认为该集合被定义为可转换的属性,这意味着 它作为二进制存档存储在SQLite文件中。然后上面的查询将起作用 至多已经加载到托管对象上下文中的对象,但不是针对 商店文件。

您可能应该将tags定义为与另一个实体的多对多关系 一个String属性(例如“name”)然后使用谓词

进行查询
[NSPredicate predicateWithFormat:@"ANY tags.name == %@", @"party"]