¿Puedo ignorar esta advertencia iPhone?
-
01-10-2019 - |
Pregunta
Tengo este código:
if([annotation respondsToSelector:@selector(tag)]){
disclosureButton.tag = [annotation tag];
}
y me da la advertencia:
'- tag' no se encuentra en el protocolo
Muy bien, pero he creado un nuevo objeto con el protocolo que tiene una variable int tag
sintetizado.
EDIT: encontrado la razón por la aplicación se estrellaba - No esta línea. Ahora acabo de recibir una advertencia y la aplicación funciona bien.
Gracias Tom
Solución
La advertencia se genera debido a la tipo estático de annotation
, MKAnnotation
, no hay -tag
método. Como ya marcó el carnero tipo dinámico responde al selector puede pasar por alto la advertencia en este caso.
Para deshacerse de la advertencia:
-
Si espera una cierta clase puede examinar para determinar su lugar:
if ([annotation isKindOfClass:[TCPlaceMark class]]) { disclosureButton.tag = [(TCPlaceMark *)annotation tag]; }
-
Para un protocolo:
if ([annotation conformsToProtocol:@protocol(PlaceProtocol)]) { disclosureButton.tag = [(id<PlaceProtocol>)annotation tag]; }
-
O si ambos no se aplican utilizar un protocolo específico para suprimir la advertencia (útil por ejemplo, con rápidos cambios de Apple API):
@protocol TaggedProtocol - (int)tag; @end // ... if([annotation respondsToSelector:@selector(tag)]){ disclosureButton.tag = [(id<TaggedProtocol>)annotation tag]; }