为什么Xcode中的控制台不能使用点符号打印我的对象的属性?

我有一个UIButton,我已经设置了AccessibleLabel。 为什么当我尝试使用点符号打印时,控制台无法find辅助function标签属性?

(lldb) po self.closeButton.accessibilityLabel error: property 'accessibilityLabel' not found on object of type 'UIButton *' error: 1 errors parsing expression (lldb) po [self.closeButton accessibilityLabel] topsecretlabel 

accessibilityLabel不是UIButton的属性。 这是由UIButton恰好响应的非正式 UIAccessibility协议定义的方法。 lldb往往对这些东西比clang更严格,用点符号来表示非财产并不严格合法。

事实上,这是一个非正式的协议,事实上使事情变得更难。 你不能轻易确定UIButton实现协议(它在技术上是NSObject的一个扩展)。 因为这个原因,我们不再使用非正式的协议了。

你可以指定作为ObjC属性声明的一部分是setters和getters不遵循正常的命名约定。 所以不知道属性声明的细节,lldb不知道如何把点符号转换成正确的方法调用。 如果它有debugging信息,它可以做这个工作。 但是我们尽量不要在debugging器中猜测这种事情。 所以如果我们没有debugging信息,那么你必须告诉我们debugging器是什么(通过手动将。表示法转换为正确的方法调用)。

无论如何,你可以访问声明accessibilityLabel属性的头文件,所以这仍然应该正常工作。 可悲的是,在clang中有一个错误,它不会为类中声明的属性发送debugging信息。 事实certificate,accessibilityLabel是在NSObject上的UIAccessibility类中定义的。 所以它没有得到debugging信息。 所以你不能使用点符号。