2010-02-11 50 views
3

我完全noob在objective-c和我想整天找到解决这个问题:
我有两个实体(存储和费用)。
在存储中我有一个属性“数字”。
的开支我有一个属性“数字”和另一个名为“成本”
两个实体通过可可绑定
两个NSArrayControllers我已经创建的子类,所以我可以创建以下动作挂表:
1。乘以Expenses.selection.number与Storage.selection.cost
我这个代码的费用ArrayController这样做:ObjC /核心数据。我如何从另一个NSArrayController更改实体的键值?

- (IBAction)submit:(id)sender { 
    NSNumber *price = [NSNumber numberWithFloat:[[self.selection valueForKey:@"storage.buy"] floatValue]]; 
    NSNumber *insert = [NSNumber numberWithInt:[[self.selection valueForKey:@"number"] intValue]]; 
    NSNumber *cost; 
    cost = [NSNumber numberWithFloat:[insert intValue] * [price floatValue]]; 
    [self.selection setValue:cost forKey:@"cost"]; 


2.获得Storage.selection.number并添加费用。 SEL ection.number
这里我有一个问题。在ArrayController我尝试费用:

NSNumber *stock = [NSNumber numberWithInt:[[self.selection valueForKey:@"storage.number"] intValue]]; 
sum = [NSNumber numberWithInt:[stock intValue] + [insert intValue]]; 
[self.selection setValue:sum forKey: @"storage.number"]; 


但我得到:[<NSManagedObject 0x10013ad50> setValue:forUndefinedKey:]: the entity Expenses is not key value coding-compliant for the key "Storage.number".
我也试图创建存储ArrayController的方法:

-(void)setNumber:(NSNumber*)number{ 
    [self.selection setValue:number forKey: @"number"]; 
} 

但是当我这样称呼它:[Storage seNumber: sum];它返回:

+[Storage setNumber:]: unrecognized selector sent to class 0x100003430

我也试过:

Storage *st = [[Storage alloc] init]; 
    [st setNumber: sum]; 
    [st release]; 


,虽然它不返回任何错误信息,这是行不通的。
任何想法如何解决这个问题?非常感谢。

回答

2

有两种方法可以做到这一点:

使用-setValue: forKeyPath:代替-setValue: forKey:;或

抓斗从所述第一对象在第二对象如下:

id selection = [self selection]; 
id storage = [selection valueForKey:@"storage"]; 
[storage setValue:sum forKey:@"number"]; 
+1

OMG,所有这一次是那么容易??非常感谢你的帮助.. :) – Pr301 2010-02-12 07:26:50

相关问题