具有运算符和NSArray的KeyPath

时间:2011-07-12 16:49:16

标签: objective-c cocoa

我有一个Person定义为

的类
@interface Person : NSObject {
    NSString *name;
    int age;
    NSArray *workedHours;
}

@property (nonatomic,retain) NSArray *workedHours;

-(int)age;
-(void)setAge:(int)val; 
-(NSString*)name;  
-(void)setName:(NSString*)val;
@end

我想把workHours总和绑定到标签......

-(void) awakeFromNib{
    [label bind:@"value" toObject:person withKeyPath:@"@sum.workedHours" options:nil];
}

我得到了这个错误: this class is not key value coding-compliant for the key @sum.

label是一个IBOutlet,person是我的NSWindowController的属性。 如果我尝试使用“@name”更改keyPath,它可以正常工作。

有什么问题?我可以使用@sum,@ count,@ avg等只能使用NSArrayController吗?

1 个答案:

答案 0 :(得分:0)

这里的问题是workingHours数组不是符合KVC的对象的集合。

例如,如果您使用了表单的日常工作记录:

@interface DailyWork : NSObject {
   NSDate *day;
   int hours;
}
@property(retain) NSDate *day;
@property int hoursWorked;
@end

然后,这应该工作,因为集合运算符期望对正在收集的对象的字段执行操作。因此,如果您在NSArray中粘贴了DailyWork *值,例如:@“workingHours。@ hours”将为您提供workHours中每个对象(DailyWork *数组)中所有工作小时数的总和。