Основные данные: реализация свойства, которое зависит от других - PullRequest
2 голосов
/ 14 сентября 2011

У меня есть следующая ситуация в моем проекте (в котором я использую Core Data): у меня есть объект, который имеет два свойства BOOL: isCompleted и isNonVisit. У него также есть третье свойство: NSNumber * status - значение свойства зависит как от значений isCompleted, так и от isNonVisit.

Когда изменяется любое из свойств BOOL, я хочу, чтобы свойство status было актуализировано автоматически.

Все три свойства должны присутствовать в базовой базе данных, поскольку я использую fetchedResultsController, который использует свойство status (как дескриптор сортировки и как sectionNameKeyPath).

Я придумал следующее решение:

в .h файле:

@property (nonatomic, retain) NSNumber *isCompleted;
@property (nonatomic, retain) NSNumber *isNonVisit;
@property (nonatomic, retain) NSNumber *status;

- (NSNumber *)calculateStatus;  //Returns proper status value based on isCompleted and nonVisit property values.

в .m файле:

@dynamic isCompleted;
@dynamic isNonVisit;
@dynamic status;

- (void)setIsCompleted:(NSNumber *)newValue
{
  [self willChangeValueForKey:@"isCompleted"];
  [self setPrimitiveValue:newValue forKey:@"isCompleted"];
  [self didChangeValueForKey:@"isCompleted"];

  self.status = [self calculateStatus];
}


- (void)setIsNonVisit:(NSNumber *)newValue
{
  [self willChangeValueForKey:@"isNonVisit"];
  [self setPrimitiveValue:newValue forKey:@"isNonVisit"];
  [self didChangeValueForKey:@"isNonVisit"];

  self.status = [self calculateStatus];
}

Решение, похоже, работает.

Итак, мой вопрос: это нормально? Я нарушаю некоторые правила CoreData или KVO?

Спасибо за любые предложения.

1 Ответ

1 голос
/ 14 сентября 2011

Ваш метод кажется надежным.

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

...