Core data 岩心数据和瞬态特性

Core data 岩心数据和瞬态特性,core-data,transient,Core Data,Transient,在核心数据中设置瞬态属性时遇到问题。我试图解决的问题是:我有一个使用核心数据成功存储的对象集合。此集合本质上是只读集合,但在运行时,我希望将另一个对象(本例中为UIImage)与集合中的每个项关联。我不需要存储图像;它纯粹是一个运行时关联。因此,我真正需要的是在集合中的每个对象中都有一个“占位符”,我可以稍后在其中放置UIImage 瞬态属性似乎是正确的,因此,核心数据参考文档告诉我,我应该在数据模型中设置一个“可选的、未定义类型的瞬态属性”,我已经这样做了: 此外,它告诉我,我不需要在实现对

在核心数据中设置瞬态属性时遇到问题。我试图解决的问题是:我有一个使用核心数据成功存储的对象集合。此集合本质上是只读集合,但在运行时,我希望将另一个对象(本例中为UIImage)与集合中的每个项关联。我不需要存储图像;它纯粹是一个运行时关联。因此,我真正需要的是在集合中的每个对象中都有一个“占位符”,我可以稍后在其中放置UIImage

瞬态属性似乎是正确的,因此,核心数据参考文档告诉我,我应该在数据模型中设置一个“可选的、未定义类型的瞬态属性”,我已经这样做了:

此外,它告诉我,我不需要在实现对象中定义相应的属性,但我必须编写自定义访问器和设置器方法。我根据文档中的示例对这些方法进行了建模,如下所示:

- (void)setDisplayImage:(UIImage *)anImage {

    [self willChangeValueForKey:@"displayImage"];
    [self setPrimitiveValue:anImage forKey:@"displayImage"];
    [self didChangeValueForKey:@"displayImage"];
}
以及:

还有一个延迟的“写入”方法(willSave),我是为了严格的完整性而编写的,尽管如上所述,我永远不会将这些对象写回存储

我遇到的问题是-(UIImage*)displayImage{的primitiveDisplayImage和setPrimitiveDisplayImage方法。基本上,编译器会对这两个方法发出警告,如“对象X可能不响应‘primitiveDisplayImage’…”等。 然而,我从文档中了解到,这些基本的访问器/设置器是自动创建的——情况似乎并非如此。 有人能帮我解决这个问题吗?
非常感谢

方法的问题是,尽管NSManagedObject会在运行时响应它们,但编译器无法知道它们的存在。您可以通过在实体类的头文件中声明方法来抑制警告消息,使用类别,这样编译器就不会因为没有定义而对您大喊大叫在您的实现中使用它

另一种方法是对需要访问的每个属性使用调用
[self-setPrimitiveValue:value-forKey:@“key”];
。我过去使用过这种方法,不过我在文档中注意到10.5及更高版本不鼓励使用这种方法。

在这里找到了答案:

基本上:在类别头文件中声明
@propery
,在类别实现文件中定义
@dynamic

- (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;
}