假设我有以下代码:
@interface ParentMO: NSManagedObject
@property NSString *inheritedProperty;
@end
@interface ChildMO: ParentMO
@property NSString *childProperty;
@end
现在,在其他类的@implementation
中的某个地方:
NSFetchRequest *fetchRequest = [NSFetchRequest new];
fetchRequest.entity = [NSEntityDescription entityForName:NSStringFromClass([ChildMO class]) inManagedObjectContext:context];
fetchRequest.resultType = NSManagedObjectResultType;
self.managedObjects = [context executeFetchRequest:fetchRequest error:nil];
当我尝试访问父级托管对象类的某些属性时,尽管有人尝试访问ManagedObject的属性时核心数据会引发错误,但它仍将返回nil:
ChildMO *managedObject = self.managedObjects.firstObject;
NSLog(@"%@", managedObject.inheritedProperty); // prints "nil"
NSLog(@"%@", managedObject.childProperty); // prints "nil"
但是,如果我将首先访问子属性,它将取消所有属性的故障,包括从ParentMO
继承的属性:
ChildMO *managedObject = self.managedObjects.firstObject;
NSLog(@"%@", managedObject.childProperty); // prints the property's contents correctly
NSLog(@"%@", managedObject.inheritedProperty); // prints the property's contents correctly
我想知道为什么它会这样工作,并且有可能使其按预期工作。我知道我们可以使用fetchRequest.returnsObjectsAsFaults = NO;
,但我想知道还有另一种解决方案,因为这看起来像我们在阻止Core Data按照Apple的设计方式进行优化(即,错误和无错)。