Ben*_*zar 2 iphone many-to-many core-data
我已建模人/标签关系.这是一对多关系; 一个人可以有多个标签,一个标签可以与多个人相关联.
我正在尝试运行查询以查看获取人员列表,这些人员已使用一组标记的每个标记进行标记.例如:每个被标记为"FOO"和"BAR"的人.
这是我尝试的代码没有成功.
NSPredicate *attributePredicate = [NSPredicate predicateWithFormat:
@"ALL personTags.tagName in %@", filtersArray];
[subPredicates addObject:attributePredicate];;
Run Code Online (Sandbox Code Playgroud)
有没有办法解决?我正在使用SqlLite作为持久性存储.我在数据库中有大约2000个人和大约100个不同的标签,只有少数标签同时应用.
反转您的查询并询问"self in%@"中的标签,然后您可以对结果数组执行KVC操作,如:
NSArray *array = [results valueForKeyPath:@"@distinctUniionOfArrays.person"];
Run Code Online (Sandbox Code Playgroud)
这将为您提供您正在寻找的结果.请注意,这是在我的iPad上输入的,因此很可能存在错别字.
请参阅有关此主题的文档
对不起,我误解了这个问题.我建议尝试一个子查询.如果不访问您的数据结构,很难对其进行测试以使其完全正确,但此代码应该让您走上正确的道路:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:moc]];
[request setPredicate:[NSPredicate predicateWithFormat:@"(SUBQUERY(self.tags, $tag, ALL $tag.name in %@).count > 0)", tagNameArray]];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
NSAssert2(error == nil, @"Error fetchings tags: %@\n%@", [error localizedDescrption], [error userInfo]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2055 次 |
| 最近记录: |