【发布时间】:2014-04-11 23:53:33
【问题描述】:
我有一个名为“IRCSessionEntry”的模型实体,它与一个名为“source”的实体具有一对一的关系,该实体具有名为“isSelected”的布尔属性。
当我执行以下获取请求时:
NSPredicate *sourceIsSelectedPredicate = [NSPredicate predicateWithFormat:@"source.isSelected == YES"];
NSFetchRequest *selectedDataSourcesFetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"IRCSessionEntry"];
selectedDataSourcesFetchRequest.predicate = sourceIsSelectedPredicate;
NSSortDescriptor *descendingStartDateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"startDate" ascending:NO];
selectedDataSourcesFetchRequest.sortDescriptors = @[descendingStartDateSortDescriptor];
结果错误地包括每个 IRCSessionEntry,无论它们的源isSelected是否为YES:
Fetched sessionEntry: source Foo isSelected = 1
Fetched sessionEntry: source Foo isSelected = 1
Fetched sessionEntry: source Bar isSelected = 0
Fetched sessionEntry: source Bar isSelected = 0
Fetched sessionEntry: source Bar isSelected = 0
Fetched sessionEntry: source Bar isSelected = 0
我在测试一对一关系上的布尔属性值的语法是否错误?如果是这样,有人可以告诉我如何写这个谓词吗?
如果没有,还有其他人有这个问题吗?
我正在使用 iOS 7.1 SDK 运行刚刚发布的 Xcode 5.1.1。
谢谢!
卡尔
P.S.:附加信息:“源”实体也有一个字符串“名称”属性;当我将一对一关系谓词格式字符串更改为
[NSPredicate predicateWithFormat:@"source.name == %@", @"Foo"]
仅正确提取 source.name 为“Foo”的实体。所以在我看来,要么:
1) 我的一对一关系的布尔属性值谓词的语法错误;或者 2) 在 iOS 7(.1) 中,一对一关系的布尔属性值谓词出现了问题。
【问题讨论】:
-
嗯,不是真的,不。我的问题是关于关系的属性(引用的帖子仅涉及实体自己的属性);此外,不起作用的测试是“== YES”,而不是“== NO”。
-
可能按照stackoverflow.com/questions/7064072/… 使用任何或全部?
-
好吧,既然“源”是一对一的关系(不是对多的),ANY 和 ALL 充其量是多余的。但我试过了,提取的行为完全一样。不过感谢您的建议!
-
我什么也没看到,我想您只是尝试将其与 1 进行比较。我所能想到的就是设置一个断点并检查获取结果以查看 source.isSelected 实际包含的内容每一行,并确保它是你所期望的......
标签: core-data attributes nspredicate relationship nsfetchrequest