Incompatible pointer type zuweisen 'ViewController'
Ich habe einen ViewController-Klasse (vielleicht sollte ich nicht genannt habe, die Klasse so ?)
Warum habe ich eine Warnung
Incompatible pointer type Zuordnung zu "ViewController" aus
'UIViewController" in AppDelegate
Update:
in dieser Zeile
self.viewController = [[[myPlugin alloc] getPluginViewController] autorelease];
in AppDelegate.h ich habe
@class ViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@end
in myPlugin ich habe
-(ViewController*) getPluginViewController {
self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
return self.viewController;
In ViewController habe ich
@interface ViewController : UIViewController {
Nein, Sie sollten nicht mit dem Namen der Klasse.
wo Sie definiert haben viewController als Eigentum, können Sie hinzufügen, dass code?
andernfalls, wenn Sie bestrebt sind, entfernen Sie diese Warnung umgehen - selbst.viewController = (ViewController *) [[[myPlugin alloc] getPluginViewController] autorelease];
Hinzufügen Sie können die definition von Sie die ViewController-Klasse?
wo Sie definiert haben viewController als Eigentum, können Sie hinzufügen, dass code?
andernfalls, wenn Sie bestrebt sind, entfernen Sie diese Warnung umgehen - selbst.viewController = (ViewController *) [[[myPlugin alloc] getPluginViewController] autorelease];
Hinzufügen Sie können die definition von Sie die ViewController-Klasse?
InformationsquelleAutor user310291 | 2012-04-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den viewController Eigenschaft in der app delegieren, wahrscheinlich hat der Typ
UIViewController*
, und Sie versuchen, ordnen Sie ein Objekt des TypsViewController*
. Wahrscheinlich ist dein ViewController-Klasse muss, erbt von UIViewController.Gibt es viele andere Probleme mit deinem code:
Ignorieren die Zuordnung, die erste Nachricht an ein Objekt direkt nach dem es zugewiesen wurde, sollte eine init-Nachricht durch Konvention. 99,99% der Programmierer wird automatisch davon aus, dass dies ein schrecklicher Fehler in deinem code, ob oder nicht, es ist ein schrecklicher Fehler. Sie sollte sich an die Konventionen.
Auch, wenn
getPluginViewController
hält das memory-management-Regeln, die Sie nicht besitzen, das Objekt zurückgegeben wird, damit Sie muss nicht autorelease.In sich selbst, das ist irgendwie OK. In Objective-C, durch Konvention, einer Methode, beginnend mit "get" ist für Methoden, die Werte zurückgeben, die in Zeiger-Parameter. Allerdings setzen Sie zusammen, mit denen Sie es nennen, gibt es mehrere Probleme:
ja, es kann ein bisschen eine Lernkurve, aber Objective-C ist eine schöne Sprache, wenn man einmal den Dreh raus hat.
InformationsquelleAutor JeremyP
Achten Sie auf doppelte Zuweisung.
Erste mal, wenn Sie die Zuweisung mit
[myPlugin alloc]
und ruftgetPluginViewController
.Aber in
getPluginViewController
Sie reservieren und initialisieren neueViewController
und gibt es zurück.InformationsquelleAutor Rinat
Entfernen Sie den Verweis von
ViewController
und andere Klassen, die Sie denken, haben problem.Gehen Sie zum finder und Stell nochmal diese Klassen, indem Sie das Häkchen neben 'kopieren', wenn nötig.
Reinigen Sie das Projekt aus dem Produkt-Menü und ausführen.
InformationsquelleAutor Anuj Saini