В моем проекте, который полностью написан с использованием Core Data и привязок, у меня есть два текстовых поля, которые содержат значения с плавающей запятой. Я хочу создать третье текстовое поле, которое будет первым полем, разделенным на второе. Как лучше всего это сделать с помощью Core Data? Должен ли я сделать собственный метод доступа для третьего поля?
Основные данные делят два значения
Ответы (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
Рекомендуется вызывать
super
и либо объединять возвращаемый набор с тем, который создается, либо, в случае, если ключ не является третьим значением, возвращать набор, возвращенный super
.
- person ; 24.04.2011
Правда, ответ отредактирован с этим дополнением. Оригинал был быстрым и грязным ответом, написанным в редакторе сайта.
- person McCygnus; 24.04.2011