objective-c:设置动态属性

时间:2013-06-29 21:40:10

标签: iphone objective-c

我有一个函数,它接收一个对象,一个属性的名称及其值。 我可以用这样简单的东西设置对象的属性:

-(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;
       }

}

1 个答案:

答案 0 :(得分:3)

好吧,您可以使用KVC

[_myObject setValue:runtimeValue forKey:runtimeProperty];

当然,您可以首先检查该属性是否对respondsToSelector有效,或者通过覆盖子类中的valueForUndefinedKey:setValue:forUndefinedKey:来捕获任何无效消息。