1

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

这行 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
无济于事...

4

1 回答 1

3

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

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

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

(或适当的 numberWithFloat )。

于 2009-07-02T03:34:25.487 回答