Core data 具有to-one关系属性==是谓词的NSFetchRequest错误地获取每个实体

Core data 具有to-one关系属性==是谓词的NSFetchRequest错误地获取每个实体,core-data,attributes,nspredicate,relationship,nsfetchrequest,Core Data,Attributes,Nspredicate,Relationship,Nsfetchrequest,我有一个名为“IRCSessionEntry”的模型实体,它与一个名为“source”的布尔属性为“isSelected”的实体具有一对一的关系 执行以下提取请求时: NSPredicate *sourceIsSelectedPredicate = [NSPredicate predicateWithFormat:@"source.isSelected == YES"]; NSFetchRequest *selectedDataSourcesFetchRequest = [NSFetchRequ

我有一个名为“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

谢谢

卡尔

备注:附加信息:“源”实体还具有字符串“名称”属性;当我将to one关系谓词格式字符串更改为

[NSPredicate predicateWithFormat:@"source.name == %@", @"Foo"]
仅在source.name为“Foo”的实体中正确获取结果。因此,在我看来:

1) 我对一对一关系的布尔属性值谓词的语法有误;或
2) iOS 7(.1)中出现了与一个关系的布尔属性值谓词有关的问题。

好的,我知道发生了什么(应该早点想到)。结果表明,该行为是由竞争条件引起的。即使关系的“source.isSelected”属性在主线程上被切换,并且即使我的fetch(本应获取新的选定源集)也在主线程上执行,由于某种原因,“source.isSelected”中的更改在执行fetch之前没有传播。换句话说:种族条件。如果在执行抓取之前插入上下文保存,则一切正常

因此,我将看看是否我无法找出如何管理更改,然后以不同的方式获取过程,从而避免在执行获取之前执行完整的上下文保存。无论如何,至少现在它是有意义的

我将把这个问题留给其他人,以防他们陷入类似的情况,这会给他们答案

再次感谢罗布对这一点的深思熟虑


卡尔

可能是重复的好吧,不是真的,不是。我的问题是关于关系的属性(引用的帖子只涉及实体自身的属性);此外,不起作用的测试是“==YES”,而不是“==NO”。也许可以根据then使用任何或全部?好吧,因为“源”是一对一关系(不是对多),任何和全部充其量都是多余的。但是我试过了,取回的行为完全一样。不过,谢谢你的建议!我什么也没看到,我想你只是试着把它和1比较一下。我所能想到的就是设置一个断点并检查获取结果,以查看source.isSelected为每一行实际包含的内容,并确保它是您所期望的。。。