链接器错误,未定义的符号:使用Objective-C运行时参考时的“_getPropertyType”

时间:2011-04-23 01:50:15

标签: objective-c cocoa linker

我试图使用以下代码获取属性名称并点击链接器错误,未定义的符号:“_ getPropertyType”

unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList([self class], &outCount);
for(i = 0; i < outCount; i++) {
    objc_property_t property = properties[i];
    const char *propName = property_getName(property);
    if(propName) {
        const char *propType = getPropertyType(property);
        NSString *propertyName = [NSString stringWithUTF8String:propName];
        NSString *propertyType = [NSString stringWithUTF8String:propType];
        }
    }
 }

我已经导入#import“objc / runtime.h”,那么我需要打开任何链接器标志吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

正如链接器告诉你的那样,Objective-C运行时API没有导出getPropertyType()函数。事实上,编译器应该在链接器之前警告过你,因为没有相应的声明。

运行时API会导出一个名为property_getAttributes的函数,该函数返回C string describing the property type。这在Objective-C Runtime Programming Guide文档中有所描述。您需要解析该字符串以获取所需的任何信息。

还有另一个question on Stack Overflow,其中一个答案包含getPropertyType()函数的定义,该函数解析property_getAttributes()返回的字符串。它可能正是你要找的东西。实际上,您的代码看起来与其他答案中的代码非常相似。

答案 1 :(得分:0)

getPropertyType()不是Objective-C API的一部分。 (即libobjc中不存在该函数。)