Objective-C点语法技巧,用于何时键值获胜';不行?

Objective-C点语法技巧,用于何时键值获胜';不行?,objective-c,cocoa,key-value-coding,Objective C,Cocoa,Key Value Coding,我正在遍历一些对象,并试图设置一些属性,这些属性显然不喜欢键值编码。因此,我无法在运行时创建一个字符串来表示“键” 这行ViewController将不会编译: [self setValue:offsetX forKeyPath:[NSString stringWithFormat:@"myView%d.center.x", anInt]]; 但我可以在一个可笑的switch语句中用点符号设置这些属性: myView1.center.x = offsetX; 还有别的办法吗?也许可以创建一个

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

这行ViewController将不会编译:

[self setValue:offsetX forKeyPath:[NSString stringWithFormat:@"myView%d.center.x", anInt]];
但我可以在一个可笑的switch语句中用点符号设置这些属性:

myView1.center.x = offsetX;
还有别的办法吗?也许可以创建一个访问器,比如myView(i).center.x?我很清楚这将是徒劳的,我甚至尝试了:[nsstringwithformat:@“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]];

(或根据需要使用浮点数)。

效果非常好!谢谢你的方法让我找到了下一个问题,那就是设置myViewX.center,它是一个CGPoint,通过类似的方式将值设置为[NSValue valueWithCGPoint:centerPoint],而不仅仅是centerPoint…lifesaver!嗯。现在,我们一直在讨论如何用如下方式包装一个用于KVC的bool:[self-setValue:YES-forKeyPath:[NSString-stringWithFormat:@“@myView%d.userInteractionEnabled”];BOOLs可以用NSNumber包装。