Базовые данные не могут генерировать примитивные средства доступа - PullRequest
0 голосов
/ 19 декабря 2010

Из моего понимания Core Data все, что необходимо для работы примитивных средств доступа, - это директива @dynamic для имени свойства (а также объявление примитивных средств доступа для этого свойства в реализации сущности).

По какой-то причине при использовании сгенерированного примитивного метода доступа метод setState: не изменяет свойство состояния:

- (int)state 
{
    NSNumber * tmpValue;

    [self willAccessValueForKey:@"state"];
    tmpValue = [self primitiveState];
    [self didAccessValueForKey:@"state"];

    return [tmpValue intValue];
}

- (void)setState:(int)value 
{
    [self willChangeValueForKey:@"state"];
    [self setPrimitiveState:[NSNumber numberWithInt:value]];
    [self didChangeValueForKey:@"state"];
}

при использовании версии кодирования значения ключа делает изменить свойство состояния

- (int)state 
{
    NSNumber * tmpValue;

    [self willAccessValueForKey:@"state"];
    tmpValue = [self primitiveValueForKey:@"state"];
    [self didAccessValueForKey:@"state"];

    return [tmpValue intValue];
}

- (void)setState:(int)value 
{
    [self willChangeValueForKey:@"state"];
    [self setPrimitiveValue:[NSNumber numberWithInt:value] forKey:@"state"];
    [self didChangeValueForKey:@"state"];
}

. В обоих случаях примитивные средства доступа I объявляются следующим образом (и в соответствии с примером и генерацией кода Apple):

@interface Post (CoreDataGeneratedPrimitiveAccessors)

- (NSNumber *)primitiveState;
- (void)setPrimitiveState:(NSNumber *)value;

@end

Я являюсьнемного в недоумении, почему это будет.Любая помощь будет принята с благодарностью!

Ответы [ 4 ]

3 голосов
/ 21 января 2011

После огромного количества головокружений, отладки, суеты и предположения и проверки я наконец выяснил, в чем проблема: Примитивы доступа к основным данным не генерируются динамически, если вы определяете эти атрибуты как переменные экземпляра.Я определил их для целей отладки (кажется, что GBD не может видеть значения свойств без определенных ivars), и это препятствовало правильной генерации примитивных методов доступа.Это то, что Apple действительно должна документировать в какой-то форме.Как это очень трудно обнаружить самостоятельно.Надеюсь, это поможет другим, у которых возникла такая же проблема!

1 голос
/ 02 февраля 2011

Я изучал это и обнаружил, что в отличие от документов, файл реализации, сгенерированный из модели данных, НЕ перечисляет примитивные динамические средства доступа. В других местах говорится, что вы должны добавить их самостоятельно. Может ли это быть проблемой?

0 голосов
/ 13 января 2011

Просто хотел сказать, что у меня та же проблема, и мне пришлось переключиться на setPrimitiveValue и primitiveValueForKey на основе вашего комментария здесь.Меня беспокоит, что реализация по умолчанию не работает.В моем случае следует отметить, что я создаю подкласс другого NSManagedObject.Не уверен, что это ваш случай.

0 голосов
/ 20 декабря 2010

Вы используете / модифицируете код NSManagedObject, сгенерированный Xcode?Я считаю, что по умолчанию они генерируются как «закомментированные» директивой #if 0.

...