有没有办法动态访问属性名称,根据字符串更改调用哪个属性?情况就是这样,我让用户在一个屏幕上从一系列事物中进行选择,并且根据他们选择的内容,我需要在下一个屏幕上修改UI。事情是我为他们选择的每个项目设置了几件事。两个屏幕链接在一起,两个屏幕上的每个属性都具有相同的属性名称开头,即“itemOne”,“itemTwo”等,所以我有prepareForSegue在用户选择的数字标签的第二个屏幕上设置一个数组(我把它们转换成了单词),但我想知道我是否可以,这取决于是否选择了这个数字我可以称之为自我。[动态生成]。高度。
我知道我可以为每个设置一个属性,然后在第二个屏幕上检查每个属性,但我想知道我是否能用更少的代码执行某些操作,我循环并设置每个,只需更改属性名称即可实际上是设定的。
答案 0 :(得分:1)
正如马迪暗示的那样,看看方法setValue:forKey:
。这将允许您使用字符串键名称在对象中设置值。
方法setValue:forKeyPath:
甚至可以让您遍历对象层次结构,例如@"someObject.aDictionary.someKey.subProperty"
。
KVC比直接属性访问慢,并且在编译时无法验证。如果目标对象没有响应密钥,则在运行时编码崩溃。 (使用类似“对象xxx不符合密钥zzz的键值”的消息)