Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSSet的Coredata获取谓词_Ios_Objective C_Core Data_Nspredicate_Nsset - Fatal编程技术网

Ios NSSet的Coredata获取谓词

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

我有一个ManagedPhotoCoreData对象,它包含一个名为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];
但我总是得到一个空的结果数组,即使我确信有带有“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:作为一种关系,正如我在答案的最后部分试图解释的那样。明白了!我试试看。又来了!