目标-c:设置动态属性
Posted
技术标签:
【中文标题】目标-c:设置动态属性【英文标题】:objective-c: Set dynamic properties [duplicate] 【发布时间】:2013-06-29 21:40:09 【问题描述】:我有一个函数,它接收一个对象、一个属性的名称及其值。 我可以像这样简单地设置对象的属性吗:
-(void)dynamicSetterWithProperty:(NSString*)propertyThatIsKnownOnlyInRuntime
andValue:(NSString*)valueThatIsKnownOnlyInRuntime
_myObject.propertyNameThatIsKnownOnlyInRuntime = valueNameThatIsKnownOnlyInRuntime;
还是我必须以这种丑陋的方式来做:
-(void)dynamicSetterWithProperty:(NSString*)propertyThatIsKnownOnlyInRuntime
andValue:(NSString*)valueThatIsKnownOnlyInRuntime
if([propertyNameThatIsKnownOnlyInRuntime isEqualToString@"name"])
_myObject.name = valueNameThatIsKnownOnlyInRuntime;
else if([propertyNameThatIsKnownOnlyInRuntime isEqualToString@"age"])
_myObject.age = valueNameThatIsKnownOnlyInRuntime;
【问题讨论】:
@KurtRevis 这是我为 setValue:forKey [嗯,你可以利用KVC:
[_myObject setValue:runtimeValue forKey:runtimeProperty];
当然,您可以先检查属性是否对 respondsToSelector
有效,或者通过在子类中覆盖 valueForUndefinedKey:
和 setValue:forUndefinedKey:
来捕获任何无效消息。
【讨论】:
从技术上讲,在一般情况下,您不能使用respondsToSelector:
来判断对象是否符合 KVC 的键,因为访问器不需要遵循具有声明属性的集合方案。我认为通常最好还是继续操作,让操作自然失败,除非有强烈的当地理由阻止它。
这是我得到的:[QuestionDetails
没有1759
属性。 @Chuck True,感谢您指出这一点。以上是关于目标-c:设置动态属性的主要内容,如果未能解决你的问题,请参考以下文章
如何滚动 UIlabel 文本并在目标 c 中动态设置它的宽度和高度