2012-04-07 15 views
0

Ich habe ARC aktiviert, In meinem didFinishLaunchingWithOptions Methode, schrieb ich den folgenden Code:Semantic Ausgabe: Inkompatible Zeiger Warnung

AppDelegate.h:

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 

@property (strong, nonatomic) ViewController *viewController; 

@end 

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    ViewController * vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:vc]; 
    self.viewController = nav; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Aber die Aussage: self.viewController = nav; bekommt eine Kompilierungswarnung, die Warnungsinformation ist:

file://.../AppDelegate.m: warning: Semantic Issue: Incompatible pointer types passing 'UINavigationController *__strong' to parameter of type 'ViewController *'

Compile Warning Information

Wie die Warnung entfernen?

Danke.

Antwort

2

Ich gehe davon aus, dass Viewcontroller eine benutzerdefinierte Unterklasse von UIViewController ist die oder eine Unterklasse von UINavigationController sich entweder völlig anders. Deshalb ist es falsch: Eine Oberklasse kann nicht vollständig als Unterklasse (n) fungieren (z. B. kann sie bestimmte Eigenschaften/Methoden usw. nicht haben), daher die Warnung.

1

Der Compiler sagt Ihnen: "NAV, eine Instanz eines UINavigationController, ist KEINE 'ViewController' oder Unterklasse von 'ViewController'". Wenn Sie wirklich zu halten, wollen sowohl die Navigation Controller und Ihre View-Controller, können Sie eine zweite Eigenschaft hinzufügen:

@property (nonatomic, strong) UINavigationController *navController; 

und stellte es dann in application:didFinishLaunchingWithOptions:

self.viewController = vc; 
self.navController = nav; 

Eine weitere Lösung wäre hier Halten Sie einfach den Navigationscontroller gedrückt und verwenden Sie die Eigenschaft 'topViewController', um auf Ihren VC zuzugreifen.

Edit: Oder besser noch, kümmert sich nicht um den Navigation Controller. Einfach tun:

self.viewController = vc; 
self.window.rootViewController = nav; 
0

Sie können es tun, wie diese

self.viewController =[nav.viewControllers objectAtIndex:0]; 

dann wird es nicht zeigt die Warnung wie „Inkompatible Zeigertypen vorbei‚UINavigationController * __ stark‘auf Parameter des Typs‚Viewcontroller *“

1

Try folgender Code: -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 

    self.window.rootViewController = nav; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
Verwandte Themen