0

ARCを有効にしました。私のdidFinishLaunchingWithOptions方法では、次のコードを記述しました。

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;
}

しかし、ステートメント:self.viewController = nav;コンパイル警告を受け取ります。警告情報は次のとおりです。

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

警告情報をコンパイルする

警告を削除する方法は?

ありがとう。

4

4 に答える 4

2

ViewControllerは、完全に異なるUIViewControllerのカスタムサブクラスであるか UINavigationController自体のサブクラスであると想定しています。それが間違っている理由です。スーパークラスはサブクラスとして完全に機能することはできません(たとえば、特定のプロパティ/メソッドなどがない場合があります)。したがって、警告が表示されます。

于 2012-04-07T08:13:06.257 に答える
1

コンパイラーは、「UINavigationControllerのインスタンスであるnavは、「ViewController」または「ViewController」のサブクラスではありません」と言っています。ナビゲーションコントローラーとビューコントローラーの両方を本当に保持したい場合は、2番目のプロパティを追加できます。

@property (nonatomic, strong) UINavigationController *navController;

そしてそれを設定しますapplication:didFinishLaunchingWithOptions:

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

ここでのもう1つの解決策は、Navigation Controllerを保持し、「topViewController」プロパティを使用してVCにアクセスすることです。

編集:またはさらに良いことに、ナビゲーションコントローラーについては気にしないでください。単に行う:

self.viewController = vc;
self.window.rootViewController = nav;
于 2012-04-07T08:12:04.050 に答える
1

次のコードを試してください:-

- (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;
}
于 2012-04-07T08:42:11.113 に答える
0

あなたはこのようにそれを行うことができます

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

その場合、「互換性のないポインタ型が「UINavigationController*__strong」を「ViewController*」型のパラメータに渡す」などの警告は表示されません。

于 2012-04-07T08:22:33.253 に答える