Пользовательские методы установщика в Базовых Данных

Я должен записать пользовательский метод установщика для поля (мы назовем его foo) в моем подклассе NSManagedObject. foo определяется в модели данных, и XCode автоматически сгенерировал @property и @dynamic поля в.h и.m файлах соответственно.

Если я пишу свой метод set как это:

- (void)setFoo: (NSObject *)inFoo {
    [super setFoo: inFoo];
    [self updateStuff];
}

затем я получаю предупреждение компилятора на вызове к super.

С другой стороны, если я делаю это:

- (void)setFoo: (NSObject *)inFoo {
    [super setValue: inFoo forKey: inFoo];
    [self updateStuff];
}

затем я заканчиваю в бесконечном цикле.

Таким образом, что корректный подход должен записать пользовательскому методу set для подкласса NSManagedObject?

68
задан Andrew Ebling 4 June 2010 в 05:51
поделиться

2 ответа

Я думаю, что здесь есть небольшая ошибка: используйте

 [self setPrimitiveValue:inFoo forKey:@"foo"];

вместо

 [self setPrimitiveFoo:inFoo];

это работает для меня.

17
ответ дан 24 November 2019 в 14:12
поделиться

Согласно документации, это будет:

- (void) setFoo:(NSObject *)inFoo {
  [self willChangeValueForKey:@"foo"];
  [self setPrimitiveValue:inFoo forKey:@"foo"];
  [self didChangeValueForKey:@"foo"];
}

Это, конечно, игнорирование того факта, что NSManagedObjects в качестве атрибутов нужны только NSNumbers, NSDates, NSDatas и NSStrings.

Однако это может быть не лучшим подходом. Поскольку вы хотите, чтобы что-то происходило, когда значение вашего свойства foo изменяется, почему бы просто не наблюдать это с помощью Key Value Observing? В данном случае это звучит как «КВО — это путь, по которым нужно идти».

103
ответ дан 24 November 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: