Основные данные делят два значения

В моем проекте, который полностью написан с использованием Core Data и привязок, у меня есть два текстовых поля, которые содержат значения с плавающей запятой. Я хочу создать третье текстовое поле, которое будет первым полем, разделенным на второе. Как лучше всего это сделать с помощью Core Data? Должен ли я сделать собственный метод доступа для третьего поля?


person John Howard    schedule 24.04.2011    source источник


Ответы (1)


Создайте метод - ThirdValue в вашем подклассе NSManagedObject, который выполняет вычисления:

- (CGFloat)thirdValue
{
  return value1 / value2; // should probably do a value2 != 0 check
}

а затем +keyPathsForValuesAffectingValueForKey для класса:

+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
{   
    NSSet *superSet = [super keyPathsForValuesAffectingValueForKey:key];

    if ([key isEqualToString:@"thirdValue"])
        return [[NSMutableSet setWithObjects:@"value1", @"value2", nil] unionSet:superSet];

    return superSet;
}

это устанавливает зависимость третьего значения от значений 1 и 2. Всякий раз, когда значение1 или значение2 изменяются, также будет уведомление KVO для третьего значения. Поэтому, если у вас есть поле, которое к нему привязано, в поле будет отображаться новое вычисленное значение. Это удобный трюк, когда вам нужно отобразить ключ, значение которого зависит от других ключей.

person McCygnus    schedule 24.04.2011
comment
Рекомендуется вызывать super и либо объединять возвращаемый набор с тем, который создается, либо, в случае, если ключ не является третьим значением, возвращать набор, возвращенный super. - person ; 24.04.2011
comment
Правда, ответ отредактирован с этим дополнением. Оригинал был быстрым и грязным ответом, написанным в редакторе сайта. - person McCygnus; 24.04.2011