У меня есть следующая ситуация в моем проекте (в котором я использую 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?
Спасибо за любые предложения.