2

同じファイル MainWindow.xib にすべてのビューを持つユニバーサル アプリケーションがあります。今日、これらのビューをそれぞれの xib ファイルに分割することにしました (たとえば、MainMenuController.h、MainMenuController.m、および MainMenuController.xib を含めるため)。IBActions を受信できなくなりました。これが私が段階的に行ったことです:

  1. MainMenuController.xib という名前の新しい .xib ファイルを作成し、そのファイルの所有者を既存の MainMenuController クラスに設定しました。

  2. MainMenuController に対応するビューを MainWindow.xib ファイルからコピーし、新しく作成した MainMenuController.xib に貼り付けました。ファイルの所有者のビューを新しく貼り付けたビュー (IB に接続) に設定しました。

  3. info.plist で、「メインの xib ファイルのベース名」のエントリを削除したため、アプリは自動的に MainWindow.xib で開きません。

  4. プログラムでウィンドウを作成するようにアプリ デリゲートを変更し、次のコードで MainMenuController をウィンドウに追加します。

    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    mainMenuController = [[MainMenuController alloc] init];
    self.window.rootViewController = mainMenuController;
    [self.window makeKeyAndVisible];
    [mainMenuController release];
    

    「mainMenuController」と「window」はインスタンス変数で、プロパティとしても宣言されています。

  5. AppDelegate クラスは 1 つしかなく、main.m には以下が含まれます。

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

アプリケーションが開くと、MainMenuController のビューが表示されます。この時点で、新しい xib ファイルの貼り付けられたビューで IBOutlets と IBActions の接続を開始しました。File's Owner に IBOutlets が表示され、正しく接続されていますが、ボタンを押しても IBAction の関数が呼び出されません。

私の頭に浮かんだ可能性のあるエラー: (1) アプリケーション ウィンドウが正しく設定されていない、イベントが渡されない、(2) ビューのコピー中に何かがスタックまたは失われ、まだ古い所有者を指している (3) 何かがスタックしているxcode プロジェクト

問題は何だと思いますか?上記のいずれかですか?どうすればこれを解決できますか? どんな助けでも大歓迎です。

前もって感謝します。

4

1 に答える 1

0

メイン ビュー コントローラの作成:

mainMenuController = [[MainMenuController alloc] init];

XIB を参照しません。したがって、XIB に含まれているかどうかに関係なく、純粋にプログラムによる作成を行っています。したがって、View Controller は動作しているように見えますが、アウトレットやアクションは接続されていません。他の場所で参照している可能性がありますが、適切ではないと思います。

おそらくあなたが望む:

mainMenuController = [[MainMenuController alloc] 
                              initWithNibName:@"MainMenuController" bundle:nil];

これは、コントローラを作成するために XIB にあるものを明示的に使用します。

于 2012-09-06T21:30:34.217 に答える