我在 Core Data 中设置瞬态属性时遇到问题。我要解决的问题是:我有一组使用 Core Data 成功存储的对象。此集合本质上是一个只读集合,但在运行时,我想将另一个对象(在本例中为 UIImage)与集合中的每个项目相关联。我不需要存储 UIImages;它纯粹是一个运行时关联。所以我真正需要的是集合中每个对象中的“占位符”,以后我可以在其中删除 UIImage。
瞬态属性似乎是正确的,为此,Core Data 参考文档告诉我应该在我已经完成的数据模型中设置“未定义类型的可选瞬态属性”:
此外,它告诉我不需要在实现对象中定义相应的属性,但我必须编写自定义访问器和设置器方法。我根据文档中的示例对这些方法进行了建模,如下所示:
- (void)setDisplayImage:(UIImage *)anImage {
[self willChangeValueForKey:@"displayImage"];
[self setPrimitiveValue:anImage forKey:@"displayImage"];
[self didChangeValueForKey:@"displayImage"];
}
和:
- (UIImage *)displayImage {
[self willAccessValueForKey:@"displayImage"];
UIImage *anImage = [self primitiveDisplayImage];
[self didAccessValueForKey:@"displayImage"];
if (anImage == nil) {
NSData *displayImageData = [self displayImageData];
if (displayImageData != nil) {
anImage = [NSKeyedUnarchiver unarchiveObjectWithData:displayImageData];
[self setPrimitiveDisplayImage:anImage];
}
}
return anImage;
}
还有一个延迟的“写入”方法(willSave),我为了严格的完整性而编写了它,尽管如上所述,我永远不会将这些对象写回存储。
我遇到的问题出在 - (UIImage *)displayImage { 的 primitiveDisplayImage 和 setPrimitiveDisplayImage 方法中。基本上,编译器会对这两种方法发出警告,因为“对象 X 可能无法响应 'primitiveDisplayImage'..”等。但是,我从文档中的理解是这些原始访问器/设置器是自动创建的 - 这似乎不是案子。有谁能帮我解决这个问题吗?非常感谢