Iphone 如何在核心数据中使用标量值(如CGFloat或CGRect)创建persistet属性?

Iphone 如何在核心数据中使用标量值(如CGFloat或CGRect)创建persistet属性?,iphone,core-data,Iphone,Core Data,是的,有一个例子: @interface Circle : NSManagedObject { CGFloat radius; } @property CGFloat radius; @end @implementation Circle - (CGFloat)radius { [self willAccessValueForKey:@"radius"]; float f = radius; [self didAccessValueForKey:@"radiu

是的,有一个例子:

@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…没有这样的类型可供选择。那么这是怎么回事呢?这个拼图少了一大块。我猜这些是未定义类型的瞬态属性???

请参阅核心数据编程指南

简而言之,您将它们定义为未定义类型的瞬态,然后将其值存储在一个或多个持久属性中

我喜欢我的模型中有很多细粒度,所以在本例中,我将创建一个单独的实体来为矩形建模。它将具有float的四个属性。它将具有临时值来设置和获取实际的矩形对象

(CGRect实际上是受NSKeyedArchiveProtocol支持的IIRC,因此您不必为它们这样做。)


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

问题出在哪里?对于CGRect属性,它的工作原理完全相同。那么,如何对其进行建模?它怎么样?你选择哪种属性类型?我知道了。因此,如果我要使一个类型为Transformable的属性,并且不定义任何自定义transformer类,那么使用NSKeyedArchiver来归档CGRect?开始有意义了…是的。大多数API提供的类型都可以保存而无需太多麻烦。