ho ottenuto questo errore:Auto sintesi proprietà non sarà sintetizzare proprietà dichiarata in un protocollo anche se la sua implementato
/business/Dropbox/badgers/BadgerNew/BGProfileView.m:56:17: Auto property synthesis will not synthesize property declared in a protocol
Sono consapevole del fatto che la sintesi di proprietà di auto non sintetizzerà proprietà dichiarata in un protocollo
Così Sintetizzo questo me stesso.
Questo è il protocollo:
@protocol BGIhaveNavigationController <NSObject>
@property (readonly)UINavigationController * navigationController;//This is the problematic property
@end
@protocol BGCommonProtocol <NSObject>
@end
Per quanto riguarda l'attuazione
@interface BGProfileView : UIViewController
@end
è un UIViewController e come sappiamo UIViewController ha una proprietà navigationController. Quindi cosa c'è che non va?
Le cose diventano problematici quando uso questo:
@interface BGProfileView() <BGReviewsTableDelegateProtocol>
protocollo BGReviewsTableDelegateProtocol eredita BGIhaveNavigationController protocollo
posso rimuovere l'avviso con l'aggiunta di:
-(UINavigationController *) navigationController
{
return self.navigationController;
}
Ma questo è assurdo. In un certo senso
-(UINavigationController *) navigationController
{
return self.navigationController;
}
-(UINavigationController *) navigationController
esiste già attraverso UINavigationController
Prova @dynamic navigationController; – Wain
funziona. Ma perché? navigationController non è lì. –
Stai utilizzando un protocollo per sostituire un metodo su una classe esistente. Questa non è mai una buona idea. @dynamic funziona perché promette che ci sarà un'implementazione lì in fase di runtime, ma se tutto ciò che è conforme a questo protocollo è un controller di visualizzazione, perché il protocollo ha bisogno della proprietà navigationController? – jrturton