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.