2013-07-10 4 views
28

In meinem Projekt heißt es Zuordnung 'AppDelegate *' von inkompatiblen Typ 'ID'.Zuordnung zu 'AppDelegate *' aus inkompatiblen Typ 'ID <UIApplicationDelegate>'

Was genau ist das? Warum ist diese Warnung aufgetreten?

Ich habe in .m erklärt

AppDelegate *appdev; 

und in viewDidLoad

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

Ich möchte diese Warnung verstecken. Was soll ich machen? Danke im Voraus.

+0

Ich frage mich nur, weil ich keine Warnung mit Ihrem Code. Welche Xcode-Version verwenden Sie? –

+0

Ich teile Appdelegate mit anderen Viewcontroller für die Ereignisbehandlung. Durch den Import von # AppDelegate.h und das Deklarieren von AppDelegate * xyz habe ich diese Warnung erhalten. Jetzt repariere ich es unter Verwendung der Antworten. Nun, ich benutze die neuesten Xcode 4.6.3 –

+0

Seltsam, ich bekomme keine Warnung, wenn ich das gleiche mache. Natürlich "repariert" ein expliziter Typ die Warnung, aber ich frage mich immer noch, warum das für dich notwendig sein sollte und nicht für mich. - Ist das AppDelegate als '@interface AppDelegate: UIResponder ' deklariert? –

Antwort

78

, da Sie wissen, dass sie gleich sind, fügen Sie einen gegossenen der Compiler

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

da dies auch in Swift

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

Ich bin nicht sicher, ob dies die richtige Erklärung ist. Das Zuweisen eines 'id objB' zu einem 'AppDelegate * objA' generiert keine Warnung in meinem Code (nur umgekehrt). Und eigentlich bekomme ich keine Warnung für den Code von der Frage. Da muss noch etwas anderes sein ... –

+0

@Martin R.Hier habe ich auch versucht ID

+0

Die explizite Umsetzung sollte nicht nötig sein.Ich nehme an, dass das AppDelegate als übereinstimmend mit einem zusätzlichen Protokoll deklariert wird, vergleiche http://stackoverflow.com/questions/11147239/xcode-appdelegate-const-strong-to-parameter-of-incompatible-type-error. –

3

Sie können den Text eingeben, um die Warnmeldung zu vermeiden.

Versuch:

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

Sie müssen Guss geben, weil es Protocol zurückgibt.

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

Wenn Sie Sie vielleicht kommen wissen zu lassen, haben Sie diese für importAppDelegateüberall. Ist einfach.

IN AppDelegate

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

ÜBERALL in der Klasse

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

AppDelegate *app = [AppDelegate app]; 
+0

in objC und auch swift, du würdest so einen getter 'getXY' NICHT nennen –

+0

@ Daij-Djan ich habe meine Antwort geändert – YannickSteph

Verwandte Themen