核心数据和谓词
Posted
技术标签:
【中文标题】核心数据和谓词【英文标题】:Core Data and Predicate 【发布时间】:2013-03-26 16:28:52 【问题描述】:假设我有一个与 Persons 有一对多关系的实体部门。我希望能够搜索体育部,看看斯科特奥尔森人是否在那里工作。 Person
Scott Olsen 并不是唯一的(可能有 3 个 Scott 在 3 个不同的 Department
s 工作)。
如何搜索 Department
Sports 以找到在那里工作的 Person
Scott Olsen 而找不到其他 Scotts?
我能想到的基本方式是:
for (Person *person in sports.persons)
if ([person.name isEqualToString:@"Scott Olsen"])
// found him!
或者:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY persons.name == 'Scott Olsen'"];
Department *department = [Department MR_findFirstWithPredicate:predicate];
但我不确定第二个是否返回在Departement
Sports 中工作的 Scott Olsen。我想我可以检查一下
if ([department.name isEqualToString:@"Sports"])
但似乎应该有更好的方法来使用 NSPredicate 来做到这一点,但我想不通。
【问题讨论】:
【参考方案1】:这是你要找的吗?
NSString *name = @"Scott Olsen";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", name];
NSSet *filtered = [sports.persons filteredSetUsingPredicate:predicate];
或者(在我发布上述代码后,您的问题发生了变化):
NSString *name = @"Scott Olsen";
NSString *department = @"Sports";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@ AND department = %@",
name, department];
Person *person = [Person MR_findFirstWithPredicate:predicate];
(假设你有一个从 Person 到 Department 的反向关系“部门”)。
【讨论】:
【参考方案2】:只需在谓词中添加第二个表达式:
[NSPredicate predicateWithFormat:@"name == 'Sports' && ANY persons.name == 'Scott Olsen'"];
【讨论】:
以上是关于核心数据和谓词的主要内容,如果未能解决你的问题,请参考以下文章