2009-05-27 3 views
2

Nehmen wir an, ich habe einen NSArrayController, der Elemente mit den Eigenschaften netCost und netProfit enthält, und ich möchte ein Total Percent Profit-Label erstellen (mit der Summe der Gewinne geteilt durch die Summe der Kosten).Das Aggregat einer Eigenschaft der Elemente in einem NSArrayController als abhängigen Schlüssel festlegen

In der Controller-Klasse mit einem Verweis auf die Array-Controller ich versucht haben, dies zu tun, wie folgt:

+ (NSSet *)keyPathsForValuesAffectingTotalPercentProfit { 
    return [NSSet setWithObjects: 
      @"[email protected]", 
      @"[email protected]", 
      nil]; 
} 

- (NSDecimalNumber *)totalPercentProfit { 
    NSDecimalNumber *totalProfit = [self valueForKeyPath:@"[email protected]"]; 
    NSDecimalNumber *totalCost = [self valueForKeyPath:@"[email protected]"]; 
    if (!([totalCost compare:[NSDecimalNumber zero]] == NSOrderedSame)) { 
     return [totalProfit decimalNumberByDividingBy:totalCost]; 
    } else { 
     return nil; 
    } 
} 

Doch die auf diese totalPercentProfit Eigenschaft gebundene Markierung nicht aktualisiert wird erhalten, wenn die abhängigen Schlüsselpfade geändert.

Kann mir jemand in die richtige Richtung zeigen, um das zu beheben?

Antwort

1

Studieren Sie die KVO-Programmieranleitung, Registering Dependent Keys. Sie können nicht zu viele Beziehungen auf diese Weise beobachten, und Sie können definitiv keine Aggregate auf diese Weise beobachten. Lesen Sie den Abschnitt zu Mac OS X 10.4 und zu vielen Beziehungen unter Mac OS X 10.5.

Verwandte Themen