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

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

最佳答案

它之所以不会编译,可能是因为offsetX是一个int或float,而不是NSNumber(在问题中提供编译器错误消息会很有帮助)。

但是KVC和setValue:forKeyPath:非常聪明,会自动为您从NSNumber转换,因此请使用:

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


(或适当的numberWithFloat)。

关于objective-c - 何时无法使用Key-Value的Objective-C点语法技巧?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1072173/

10-13 04:00