2013-07-10 11 views
28

Nel mio progetto si dice Assegnazione a "AppDelegate *" dal tipo incompatibile "id".Assegnazione a "AppDelegate *" dal tipo incompatibile "id <UIApplicationDelegate>"

Che cosa è esattamente questo? Perché si è verificato questo avviso?

ho dichiarato in .m

AppDelegate *appdev; 

e in viewDidLoad

{ 
    appdev = [[UIApplication sharedApplication]delegate];  <= warning here 
} 

voglio nascondere questo avvertimento. Cosa dovrei fare? Grazie in anticipo.

+0

Mi chiedo solo perché non ho ricevuto alcun avvertimento con il codice. Quale versione di Xcode usi? –

+0

Sto condividendo appdelegate con altri viewcontroller per la gestione degli eventi. Importando # AppDelegate.h e dichiarando AppDelegate * xyz, ho ricevuto questo avviso. Ora l'ho risolto usando le risposte sottostanti. Bene, sto usando l'ultimo Xcode 4.6.3 –

+0

Strano, non ricevo un avvertimento se faccio la stessa cosa. Ovviamente un cast di tipo esplicito "aggiusta" l'avviso, ma mi chiedo ancora perché questo dovrebbe essere necessario per te e non per me. - AppDelegate è dichiarato come '@interface AppDelegate: UIResponder '? –

risposta

78

poiché si sa forse uguali, aggiungere un cast di lasciare che il compilatore a sapere

AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication]delegate]; 

poiché questo potrebbe venire a Swift troppo

let app = UIApplication.shared.delegate as! AppDelegate 
+0

Non sono sicuro che questa sia la spiegazione corretta. Assegnare un 'id objB' a un' AppDelegate * objA' non genera un avvertimento nel mio codice (solo il contrario). E in realtà non ricevo un avvertimento per il codice dalla domanda. Deve esserci qualcos'altro ... –

+0

@ Martin R. Ho provato anche id

+0

Il cast esplicito non dovrebbe essere necessario.Suppongo che AppDelegate sia dichiarato conforme a un protocollo aggiuntivo, confrontare http://stackoverflow.com/questions/11147239/xcode-appdelegate-const-strong-to-parameter-of-incompatible-type-error. –

3

È possibile digitare cast per impedire il messaggio di avviso.

prova:

appdev = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
1

è necessario digitare fusione perché restituisce protocollo.

appdev = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
7

Se si desidera avere questo per importazioneAppDelegateovunque. È semplice.

IN AppDelegate

/** 
* Get AppDelegate 
* Call [AppDelegate getAppDelegate] 
* 
* @return AppDelegate 
*/ 
+ (AppDelegate *) app { 
    return (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
} 

in qualsiasi punto della CLASSE

#import "AppDelegate.h" // TOP OF YOUR CLASS 

AppDelegate *app = [AppDelegate app]; 
+0

in objC e anche swift, non dovresti nominare un getter 'getXY' –

+0

@ Daij-Djan ho cambiato la mia risposta – YannickSteph

Problemi correlati