如何查看某个类是否有属性?

时间:2011-07-20 16:19:54

标签: iphone ios

我正在解析一些xml,并且我经常使用新功能更新服务器。因此,当我添加新标签或其他内容时,我的应用程序在我调用时解析数据崩溃,因为currentElementValue还不是我的类的一部分。无论如何都要检查一个类是否有属性,还是应该捕获引发的异常?

[a setValue:currentElementValue forKey:elementName];

由于

3 个答案:

答案 0 :(得分:19)

很简单:

if (class_getProperty([object class], "propertyName")) {
    // it has that property!
}

答案 1 :(得分:8)

如果您没有覆盖标准的setter和getter名称,可以使用:

 if ([object respondsToSelector:@selector(setProp:)]) {

表示名为“prop”的属性的setter方法,或者:

 if ([object respondsToSelector:@selector(prop)]) {

用于其getter方法。

否则,如果您使用如下语法:

@property (assign, getter=hasProp) BOOL prop;

在定义属性时,请使用具有上述语法的相应名称:

 if ([object respondsToSelector:@selector(hasProp)]) {

答案 2 :(得分:0)

首先,您需要将属性名称的第一个字母大写。

NSString *capitalizedProperty = [NSString stringWithFormat:@"%@%@", [[propertyName substringToIndex:1] uppercaseString], [propertyName substringFromIndex:1]];

然后你需要创建一个设置属性的选择器。 (如果你有一个名为“foo”的属性,那么默认情况下,这个属性的setter将被称为“setFoo:”。)

SEL propertySetter = NSSelectorFromString([NSString stringWithFormat:@"set%@:",capitalizedProperty]);

然后就像塞尔吉奥的回答一样,请致电:

if ([object respondsToSelector:propertySetter])
{
    [object setValue:value forKey:propertyName];
}

检查this post以了解如何获取对象的属性。