我试图使用以下代码获取属性名称并点击链接器错误,未定义的符号:“_ 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”,那么我需要打开任何链接器标志吗?
谢谢!
答案 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中不存在该函数。)