4

シミュレーターで以下のコードを実行すると、画面が赤く塗りつぶされるはずですが、代わりにすべて黒くなります。なぜですか?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  UIView * myView = [[UIView alloc] initWithFrame:[window bounds]];
  [myView setBackgroundColor:[UIColor redColor]];
  [window addSubview:myView];
  [window makeKeyAndVisible];
  return YES;
}

ウィンドウの初期化を追加すると、それは役に立ちません:

window = [[[UIWindow alloc] init] initWithFrame:[[UIScreen mainScreen] bounds]];

Xcode で Window ベースのユニバーサル プロジェクトを作成した後、プロジェクトで自動的に作成された iPad/iPhone xib ファイルと iPhone/iPad アプリ デリゲート ファイルを削除し、代わりにビューを持つ単一のアプリ デリゲートを作成することにしたときに、問題が発生しました。デバイスに基づいてプログラムでビューを構築するコントローラー。アプリデリゲートで作成した単純なビューを表示できないようになりました。

編集:ビューの追加を削除し、ウィンドウの背景色を赤に設定しました。これは役に立ちませんが、シミュレーターでデスクトップに移動して実行中のアプリを再度開くと、赤い画面が表示されます。繰り返しになりますが、最初にアプリを起動したときに赤が表示されない理由がわかりません。

4

2 に答える 2

8

非 InterfaceBuilder (.xib) ユニバーサル iOS プロジェクトをセットアップする手順は次のとおりです。

  1. アプリケーションのプロパティ リストで、.xib ファイルへのすべての関連付けを削除します。 アプリケーションの plist から .xib ファイルの参照を削除します。

  2. プロジェクトからすべての .xib ファイルを削除します

  3. (オプション) 共通の Application Delegate クラスを作成し、AppDelegate_iPad.* および AppDelegate_iPhone.* ファイルを削除します。(削除する前に、既存のファイルからコードをコピーして貼り付けます)
  4. main.m ファイルを変更して、アプリケーション デリゲートに名前を付けます。例として、AppDelegate_iPhone を変更して使用することにしました。ドキュメントを参照してください: UIApplication リファレンス

    // main.m int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    // Start an iPhone/iPad App using a .xib file (Defaults set in .plist)
    //int retVal = UIApplicationMain(argc, argv, nil, nil);
    
    // Start the iPhone/iPad App programmatically
    // Set the 3rd argument to nil, to use the default UIApplication
    // Set the 4th argument to the string name of your AppDelegate class
    int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate_iPhone");
    
    [pool release];
    return retVal;
    

    }

  5. アプリケーション デリゲート コードを更新します。

    // AppDelegate_iPhone.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        // Override point for customization after application launch.
        NSLog(@"Launch my application iphone");
    
        // Create the window, it's not created without a nib
        window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    
        // Create a subview that is red
        UIView *myView = [[UIView alloc] initWithFrame:[window bounds]];
        [myView setBackgroundColor:[UIColor redColor]];
    
        // Add the subview and release the memory, sicne the window owns it now
        [self.window addSubview:myView];
        [myView release]; 
    
        [self.window makeKeyAndVisible];
    
        return YES;
    }
    
于 2010-12-11T20:27:31.333 に答える
1

私はあなたのコードを実行しようとしましたが、うまくいきました。赤く着色された空のビューが表示されました。ブレークポイントを追加して、コードが実際に実行されることを確認しましたか? そうでなければ、私が思いつくことができる唯一のことは、それがあなたの UIWindow にあるということです。

于 2010-12-11T20:26:57.750 に答える