当Key-Value不起作用时,Objective-C点语法技巧?

时间:2009-07-02 02:40:31

标签: objective-c cocoa key-value-coding

我正在迭代一些对象并且尝试来设置一些显然不喜欢键值编码的属性。所以我无法在运行时创建一个字符串来表示“密钥”。

这一行ViewController无法编译:

[self setValue:offsetX forKeyPath:[NSString stringWithFormat:@"myView%d.center.x", anInt]];

但是我可以在一个荒谬的switch语句中用点表示法设置这些属性:

myView1.center.x = offsetX;

还有其他方法可以解决这个问题吗?也许创建一个像myView(i).center.x这样的访问器?完全了解它将是徒劳的,我甚至尝试过:[NSString stringWithFormat:@“myView%d”,anInt] .center.x
无济于事......

1 个答案:

答案 0 :(得分:3)

它不会编译的原因可能是因为offsetX是一个int或float,而不是一个NSNumber(在你的问题中给出编译器错误信息会很有帮助)。

然而KVC和setValue:forKeyPath:非常聪明,会自动从NSNumber转换,所以使用:

[self setValue:[NSNumber numberWithInt:offsetX] forKeyPath:[NSString stringWithFormat:@"myView%d.center.x", anInt]];

(或适当的numberWithFloat)。