Posso ignorare questo avviso iphone?
-
01-10-2019 - |
Domanda
ho questo codice:
if([annotation respondsToSelector:@selector(tag)]){
disclosureButton.tag = [annotation tag];
}
e ottengo l'avvertimento:
'- tag' non trovato nel protocollo
Fiera abbastanza, ma ho creato un nuovo oggetto con il protocollo che ha una variabile int tag
sintetizzato.
EDIT: trovato il motivo per cui l'applicazione è stata crash - non questa linea. Ora ottengo solo un avvertimento e l'applicazione funziona bene.
Grazie Tom
Soluzione
L'avviso viene generato perché per il tipo statico di annotation
, MKAnnotation
, non esiste un metodo -tag
. Come già controllato montone castrato il tipo dinamico risponde al selettore è possibile ignorare l'avviso in questo caso.
Per sbarazzarsi del avvertimento:
-
Se ci si aspetta una certa classe è possibile testare per esso, invece:
if ([annotation isKindOfClass:[TCPlaceMark class]]) { disclosureButton.tag = [(TCPlaceMark *)annotation tag]; }
-
Per un protocollo:
if ([annotation conformsToProtocol:@protocol(PlaceProtocol)]) { disclosureButton.tag = [(id<PlaceProtocol>)annotation tag]; }
-
O se entrambi non si applicano utilizzare un protocollo specifico per eliminare l'avviso (utile per esempio con rapida evoluzione API di Apple):
@protocol TaggedProtocol - (int)tag; @end // ... if([annotation respondsToSelector:@selector(tag)]){ disclosureButton.tag = [(id<TaggedProtocol>)annotation tag]; }