titlelabel guidelines color buttons ios objective-c uibutton lldb

guidelines - menu ios



¿Por qué la consola de Xcode no puede imprimir la propiedad de mi objeto usando notación de puntos? (2)

Tengo un UIButton en el que configuré la etiqueta de accesibilidad. ¿Por qué la consola no puede encontrar la propiedad de la etiqueta de accesibilidad cuando intento imprimirla usando notación de puntos?

(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


Una de las cosas que puede especificar como parte de la declaración de propiedades ObjC es setters y getters que no siguen la convención de nomenclatura normal. Entonces, sin conocer los detalles de la declaración de propiedad, lldb no sabe cómo convertir la notación de puntos en la llamada al método correcta. Si tiene información de depuración, puede hacer este trabajo. Pero tratamos de no adivinar sobre este tipo de cosas en el depurador. Entonces, si no tenemos información de depuración, debe decirnos qué es el colocador (convirtiendo manualmente la notación. A la llamada al método correcto).

De todos modos, tienes acceso al archivo de cabecera que declara la propiedad accessibilityLabel así que esto debería funcionar correctamente. Lamentablemente, hay un error en clang que no emite información de depuración para las propiedades declaradas en categorías en las clases. Como resultado, accessibilityLabel se define en la categoría UIAccessibility en NSObject. Por lo tanto, no obtiene información de depuración. Entonces no puedes usar la notación de puntos en él.


accessibilityLabel no es propiedad de UIButton . Es un método definido por el protocolo informal UIAccessibility que UIButton responde. lldb tiende a ser más estricto sobre estas cosas que clang, y no es estrictamente legal referirse a un no-propiedad mediante notación de puntos.

El hecho de que sea un protocolo informal hace que las cosas sean mucho más difíciles para lldb. No se puede determinar fácilmente que UIButton implementa el protocolo (técnicamente es una extensión de NSObject ). Ya no usamos protocolos informales por esa razón.