如何在Core Data中使用像CGFloat或CGRect这样的标量值创建一个persistet属性?

时间:2010-06-11 13:06:40

标签: iphone core-data

是的,documentation有一个例子:

@interface Circle : NSManagedObject
{
    CGFloat radius;
}
@property CGFloat radius;
@end

@implementation Circle

- (CGFloat)radius
{
    [self willAccessValueForKey:@"radius"];
    float f = radius;
    [self didAccessValueForKey:@"radius"];
    return f;
}

- (void)setRadius:(CGFloat)newRadius
{
    [self willChangeValueForKey:@"radius"];
    radius = newRadius;
    [self didChangeValueForKey:@"radius"];
}
@end

但这几乎就是一切。那么:我该如何建模呢?想象一下这是一个CGRect ......没有这样的类型可供选择。那怎么能起作用呢?丢失了一大块难题。我猜这些是未定义类型的瞬态属性??

1 个答案:

答案 0 :(得分:2)

请参阅核心数据编程指南Non-Object attribue

简短回答,您将它们定义为未定义类型的瞬态,然后将它们的值存储在一个或多个持久属性中。

我在模型中喜欢很多细粒度,所以在这种情况下我会创建一个单独的实体来模拟矩形。它有四个属性float。它将具有瞬态值来设置和获取实际的矩形对象。

(CGRect是IIRC实际上由NSKeyedArchiveProtocol支持,所以你不必为他们这样做。)

生成自定义NSManagedObject子类时,该类的属性不限于数据模型中定义的实体的属性。只要不尝试在持久性存储中直接存储该类型,就可以疯狂地拍打任何类型的各种属性。