我一直在使用这个
objc_property_t *properties = class_copyPropertyList([NSString class], &outCount);
有两个限制,我不知道如何解决:
如何动态列出类(或实例)中的所有IBOutlet属性?
答案 0 :(得分:3)
IBOutlet
是#define
d as a blank string;它在编译或运行时都没有任何影响。它的唯一目的是允许Interface Builder查看头文件并查看哪些ivars应该用作连接。确定哪些ivars被声明为IBOutlet
的唯一方法是同样对您正在使用的任何类的头文件进行一些文本处理。
对于这些属性,我不确定除了上超级列表并获取所有属性之外还有其他方法。您可以在循环中调用class_getSuperclass
来获取类的整个祖先; *当您使用根类(Nil
)作为参数调用它时,函数将返回NSObject
。 p>
*请参阅,例如我的this SO answer。
答案 1 :(得分:0)
从我所读到的这是不可能的。原因是IBOutlet是一个无法解决的宏。因此编译的应用程序中没有任何内容可以检测到。它由接口构建器使用,它查看它可以看到它的原始源代码。