我有一个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"]];
我也尝试了很多其他的东西,但到目前为止还没有任何工作!有什么想法吗?
答案 0 :(得分:6)
要获取具有至少一个带有指定值的标记的对象,以下谓词应该可以使用
[NSPredicate predicateWithFormat:@"ANY tags == 'party'"]
或更好
[NSPredicate predicateWithFormat:@"ANY tags == %@", @"party"]
但我认为该集合被定义为可转换的属性,这意味着 它作为二进制存档存储在SQLite文件中。然后上面的查询将起作用 至多已经加载到托管对象上下文中的对象,但不是针对 商店文件。
您可能应该将tags
定义为与另一个实体的多对多关系
一个String属性(例如“name”)然后使用谓词
[NSPredicate predicateWithFormat:@"ANY tags.name == %@", @"party"]