我有一个核心数据模型如下
attributes
的{{1}}属性是一组Page
,它们是我的Page对象的值,非常类似于标准DictionaryEntry
(除了所有NSDictionary
1}}和keys
是字符串)
我的values
Page
DictionaryEntry
和key="title"
。我如何形成一个获取请求来加载该特定页面?
答案 0 :(得分:7)
您应该查看子查询的谓词语法。您不能使用通常的ANY关键字,因为这只允许您同时匹配一列而不是两列。
NSString *keyValue = @"title";
NSString *valueValue = @"home";
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Page" inManagedObjectContext:_context]];
[request setPredicate:[NSPredicate predicateWithFormat:@"(SUBQUERY(attributes, $a, $a.key == %@ && $a.value == %@).@count != 0)", keyValue, valueValue]];
更简单的谓词ANY attributes.key = "title" AND ANY attributes.value = "home"
不起作用,因为它还返回具有两个dicts的页面,例如key ='addr'/ value ='home'和key ='title'/ value ='pete'。
答案 1 :(得分:1)
假设您首先知道“Title”的DictionaryEntry的“键”。
创建NSPredicate时,为什么不使用已知的“密钥”在DictionaryEntry对象上创建NSFetchRequest。
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"DictionaryEntry" inManagedObjectContext:_context]];
[request setPredicate:[NSPredicate predicateWithFormat:@"key == %@", keyValue]];
获得有效的DictionaryEntry对象后,您就可以使用CoreData简化的“页面”关系来获取有效的页面。