Установка агрегата свойства элементов в NSArrayController в качестве зависимого ключа - PullRequest
2 голосов
/ 27 мая 2009

Допустим, у меня есть NSArrayController, который содержит элементы, каждый со свойствами netCost и netProfit, и я хочу создать метку Total Percent Profit (содержащую сумму прибыли, поделенную на сумму затрат).

В классе контроллера со ссылкой на контроллер массива я попытался сделать это следующим образом:

+ (NSSet *)keyPathsForValuesAffectingTotalPercentProfit {
    return [NSSet setWithObjects:
            @"myArrayController.arrangedObjects.@sum.netProfit", 
            @"myArrayController.arrangedObjects.@sum.netCost", 
            nil];
}

- (NSDecimalNumber *)totalPercentProfit {
    NSDecimalNumber *totalProfit = [self valueForKeyPath:@"myArrayController.arrangedObjects.@sum.netProfit"];
    NSDecimalNumber *totalCost = [self valueForKeyPath:@"myArrayController.arrangedObjects.@sum.netCost"];
    if (!([totalCost compare:[NSDecimalNumber zero]] == NSOrderedSame)) {
        return [totalProfit decimalNumberByDividingBy:totalCost];
    } else {
        return nil;
    }
}

Тем не менее, метка, связанная с этим свойством totalPercentProfit, не обновляется при изменении путей зависимых ключей.

Кто-нибудь может указать мне правильное направление для исправления этого?

1 Ответ

1 голос
/ 27 мая 2009

Изучите Руководство по программированию KVO, Регистрация зависимых ключей . Вы не можете наблюдать за многими отношениями таким образом, и вы определенно не можете наблюдать совокупности таким образом. Прочтите раздел «Mac OS X v10.4 и многие другие связи в Mac OS X v10.5».

...