如何正确实现Core Data虚拟属性?

时间:2012-03-23 23:15:46

标签: objective-c ios core-data

我在CoreData数据模型中有一个16的整数属性(位置), 但是整数只是一个标志,我想在使用类的实例时读/写为NSString。

如何在遵守托管对象规则的同时实现这一目标?

我是否还需要:

@property (nonatomic, retain) NSNumber *location;
/////
@dynamic location;

或者我可以这样做:

@interface Game : NSManagedObject
@property(nonatomic, retain) NSString *location;
@end

@interface Game(PrimitiveAccessors)
- (NSNumber *)primitiveLocation;
- (void)setPrimitiveLocation:(NSNumber *)newLocation;
@end

@implementation Game

@dynamic location;

- (NSString *)location
{
    [self willAccessValueForKey:@"location"];

    NSString *location = nil;
    if ([self primitiveLocation] == 0)
    {
        location = @"Home";
    }
    if ([self primitiveLocation] == 1)
    {
        location = @"Away";
    }

    [self didAccessValueForKey:@"location"];

    return location;
}

- (void)setLocation:(NSString *)newLocation
{
    [self willChangeValueForKey:@"location"];

    if (newLocation == @"Home")
    {
        [self setPrimitiveLocation:0];
    }
    if (newLocation == @"Away")
    {
        [self setPrimitiveLocation:1];
    }

    [self didChangeValueForKey:@"location"];
}

@end

2 个答案:

答案 0 :(得分:0)

为什么不将字符串名称保存在plist,或者可访问的常量或本地数组中?

例如:
0 - > [stringValues objectAtIndex:0] - >“home”
1 - > [stringValues objectAtIndex:1] - >“离开”

让我们说你要改变文本“home”和“away”,如果你用持久性int表示字符串(通过常量或数组或其他任何,不保存在核心数据中),你可以保留你的字符串一致,并且有能力改变。

有点像关键 - >有价值的东西。

答案 1 :(得分:0)

location属性应为NSString *

类型