动态列出类的IBOutlet

时间:2011-07-06 02:02:03

标签: objective-c ios macos

我一直在使用这个

objc_property_t *properties = class_copyPropertyList([NSString class], &outCount);

有两个限制,我不知道如何解决:

  1. 它不会列出继承的属性。
  2. 我无法将IBOutlets与其他属性区分开来。
  3. 如何动态列出类(或实例)中的所有IBOutlet属性?

2 个答案:

答案 0 :(得分:3)

IBOutlet#defined as a blank string;它在编译或运行时都没有任何影响。它的唯一目的是允许Interface Builder查看头文件并查看哪些ivars应该用作连接。确定哪些ivars被声明为IBOutlet的唯一方法是同样对您正在使用的任何类的头文件进行一些文本处理。

对于这些属性,我不确定除了上超级列表并获取所有属性之外还有其他方法。您可以在循环中调用class_getSuperclass来获取类的整个祖先; *当您使用根类(Nil)作为参数调用它时,函数将返回NSObject。 p>


*请参阅,例如我的this SO answer

答案 1 :(得分:0)

从我所读到的这是不可能的。原因是IBOutlet是一个无法解决的宏。因此编译的应用程序中没有任何内容可以检测到。它由接口构建器使用,它查看它可以看到它的原始源代码。