Ios NSSet的Coredata获取谓词
我有一个ManagedPhotoCoreData对象,它包含一个名为tags的NSSet属性。标记集中的每个对象都是一个NSString 我需要获取所有ManagedPhoto对象,这些对象具有具有特定值的标记,例如“party”。这就是我正在做的-Ios NSSet的Coredata获取谓词,ios,objective-c,core-data,nspredicate,nsset,Ios,Objective C,Core Data,Nspredicate,Nsset,我有一个ManagedPhotoCoreData对象,它包含一个名为tags的NSSet属性。标记集中的每个对象都是一个NSString 我需要获取所有ManagedPhoto对象,这些对象具有具有特定值的标记,例如“party”。这就是我正在做的- NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"ManagedPhoto"]; fetchRequest.predicate = [NSPred
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"ManagedPhoto"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SELF.tags == 'party'"];
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
但我总是得到一个空的结果数组,即使我确信有带有“party”标记的ManagedPhotos。我也试过这个-
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SELF.tags IN %@", @[@"party"]];
我也尝试过很多其他的方法,但到目前为止都没有效果!有什么想法吗?要获取至少有一个具有指定值的标记的对象,以下谓词应该起作用
[NSPredicate predicateWithFormat:@"ANY tags == 'party'"]
或者更好
[NSPredicate predicateWithFormat:@"ANY tags == %@", @"party"]
但是我假设集合被定义为一个可转换的属性,这意味着
它作为二进制归档文件存储在SQLite文件中。那么上面的查询就可以了
最多针对已加载到托管对象上下文中的对象,但不针对
存储文件
您可能应该将标记定义为与另一个具有
一个字符串属性(例如“name”),然后使用谓词进行查询
[NSPredicate predicateWithFormat:@"ANY tags.name == %@", @"party"]
tags
只是一组字符串,还是它与另一个具有字符串属性的实体的关系?tags
只是一组字符串,该集合存储为可转换属性!现在,为什么它不起作用,这是有道理的。我应该如何存储该设备?Thxs@user1656412:作为一种关系,正如我在答案的最后部分试图解释的那样。明白了!我试试看。又来了!