9

私はこの警告に数時間悩まされています。私は答えを求めてSOを見回し、見つけたすべてのものを試しましたが、解決策を見つけることができませんでした。Xcodeがデフォルトで生成した、私が持っているコードの概要を次に示します。

これは私のAppDelegateにあります

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

これはmain.mにあります(この回答によると)

int main(int argc, char *argv[])
{
    @autoreleasepool {
        int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        return retVal;
    }
}

また、MainWindow.xib のすべての接続が正しく接続されています。だから私は今途方に暮れています。私が行方不明になる可能性のあるものはありますか?前もって感謝します!

4

4 に答える 4

19

を持っている場合、ウィンドウを設定するのは奇妙rootViewControllerです。通常、プロジェクトは次の3つのテンプレートのいずれかに従います。application:didFinishLaunchingWithOptions:MainWindow.xib

  • 一部のプロジェクトにはがありMainWindow.xibます。ターゲットの「MainInterface」は、ターゲットの「Summary」タブ(またはそのInfo.plist)で「MainWindow」に設定されています。このxibのファイルの所有者はUIApplicationです。xibにはAppDelegate、ファイルの所有者のdelegateアウトレットに接続されたのインスタンスが含まれています。xibには、も含まれていますUIWindow。そのrootViewController出口は、同じくxib内にあるUIViewController(またはUINavigationController)に接続されています。アプリケーションデリゲートがapplication:didFinishLaunchingWithOptions:メッセージを受信するまでに、xibは完全にロードされているため、ウィンドウとそのルートビューコントローラーは既にセットアップされています。

  • 他のプロジェクトには。がありませんMainWindow.xib。ターゲットの「メインインターフェイス」は空です。代わりに、UIApplicationMain関数はのインスタンスを作成し、それをのデリゲートAppDelegateとして設定して、メッセージを送信します。アプリデリゲートは、を作成し、View Controller(または複数)を作成し、ウィンドウのプロパティを設定することで、そのメッセージを処理します。デフォルトのバージョンは次のようになります。UIApplicationapplication:didFinishLaunchingWithOptions:UIWindowrootViewController

    - (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];
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
        return YES;
    }
    
  • 一部のプロジェクトにはがありMainStoryboard.storyboardます。あなたの問題とは関係がないように思われるので、これについては詳しく説明しません。

あなたが説明している問題は、最初のテンプレートの半分と2番目のテンプレートの半分を使用しているように聞こえます。それはうまくいきません。どちらのアプローチを取るかを決めて、オールインする必要があります。

于 2012-07-17T04:21:46.303 に答える
2

xib ファイルを開き、プレースホルダーの [ファイルの所有者] を右クリックします。ビューがビュー アウトレットに接続されていない場合は、「Ctrl」キーを押しながらマウスの右クリックをドラッグしてデザインし、再度実行します ^^ (特定のコントロールにドラッグしないでください。境界ビューが表示されたら背景デザインにドラッグします)。

于 2012-11-01T02:28:33.097 に答える
1

RootViewController @property(weak, nonatomic) IBOutlet UIView* loadViewにあったため、このメッセージが表示されます。そしてviewDidLoadが2回呼び出されました...名前を別の名前に変更します...

于 2013-07-08T10:00:13.057 に答える
0

プロジェクトで問題を解決しました。以下の手順に従って解決してください。

1)メインのView Controller nibファイルを開きます。そのファイルはappDelegate eg.ViewCotroller.xibで参照されています

2) nib ファイルでビューの接続を確認し、ファイルの所有者に接続されていない場合は接続します。

3) プロジェクトを実行します。

于 2013-03-26T06:14:37.973 に答える