Как правильно реализовать виртуальный атрибут Core Data? - PullRequest
0 голосов
/ 24 марта 2012

У меня есть целочисленный атрибут 16 (местоположение) в модели данных CoreData, но целое число - это просто флаг, я хочу читать / писать как 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 голосов
/ 24 марта 2012

Свойство location должно иметь тип NSString *

0 голосов
/ 24 марта 2012

Почему вы не сохраняете имена строк в plist, или в доступных константах, или в локальном массиве?

Например:
0 -> [stringValues ​​objectAtIndex: 0] -> "home"
1 -> [stringValues ​​objectAtIndex: 1] -> "вдали"

Допустим, в будущем вы захотите изменить текст «home» и «away», если вы представляете строку (через константу или массив или как угодно, не сохраненную в основных данных) с помощью постоянного int, вы можете сохранить Строки согласуются и могут изменяться.

Вроде как ключ -> ценность вещь.

...