核心数据不会为实体属性触发错误,但对关系触发错误



我有一个名为Trigger的核心数据实体,它与另一个称为ActiveTrigger的实体具有多对一关系。当我使用 [request setReturnsObjectsAsFaults:NO]; 查询核心数据以查找触发器对象时,查询结果在每个触发器上都有一个 NSSet 的 ActiveTrigger 实体作为触发器。但是,ActiveTrigger 对象有一个数据错误,当我访问任何属性时不会触发该错误,但在我访问 ActiveTrigger 上的某个关系时会触发该错误。访问属性或关系时,故障不应该触发吗?触发关系错误后,在未触发错误后返回的相同属性 (null) 是实际值。

NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Trigger class])];
[request setPredicate:[NSPredicate predicateWithFormat:@"identifier IN %@", triggerIds]];
[request setReturnsObjectsAsFaults:NO];
NSError * error = nil;
NSArray * results = [[NSManagedObjectContext sharedManagedObjectContext] executeFetchRequest:request error:&error];
for (Trigger * trigger in results) {
    for (ActiveTrigger * activeTrigger in trigger.activeTriggers) {
        NSLog(@"Here is the survey name as a property on the ActiveTrigger 1:  %@", activeTrigger.surveyName);
        NSLog(@"Here is the survey name via the relationship:                  %@", activeTrigger.survey.name);
        NSLog(@"Here is the survey name as a property on the ActiveTrigger 2:  %@", activeTrigger.surveyName);
    }
}

//Here are the logs resulting from the code above
2016-03-01 13:48:28.809 AppName[31787:1480404] Here is the survey name as a property on the ActiveTrigger 1:  (null)
2016-03-01 13:48:28.811 AppName[31787:1480404] Here is the survey name via the relationship:                  All Q
2016-03-01 13:48:28.811 AppName[31787:1480404] Here is the survey name as a property on the ActiveTrigger 2:  All Q

第一个日志之后的断点确认 activeTrigger 对象在尝试访问 surveyName 属性后仍存在数据错误

解决了。事实证明,ActiveTrigger实现中的属性使用的是@synthesize而不是@dynamic。更改为动态,并且在访问属性时正确触发数据错误

最新更新