0

そのため、先週慎重にアプリを設計および計画した後、アプリを少し変更するようにというリクエストがありました。この変更を行うには、ビューを変更できるように、すべてをナビゲーション コントローラーの一部として持つ必要があります (現在、正しく動作しないサブビューを使用しています)。

AppDelegate.h と AppDelegate.m を変更して、新しいウィンドウとビューを参照できるようにしましたが、起動時に黒い画面が表示されます。

デバッガーを使用した後、ウィンドウ ポインターが AppDelegate にあり、インターフェイス ビルダーを使用して接続したウィンドウに初期化された後、まだメモリ アドレス 0 を指していることに気付きました。

明らかに、私は完全に間違ったことをしており、ここからどこへ行くべきかわかりません。どのような情報を提供すればよいのかもわかりません。安全のために、ここに私の AppDelegate.h があります。

#import <UIKit/UIKit.h>
#import "InitialisationController.h"


@interface AppDelegate : NSObject <UIApplicationDelegate>

@property (strong, nonatomic) IBOutlet UIWindow *window;
@property (strong, nonatomic) IBOutlet UINavigationController *navigationController;
@property (strong, nonatomic) IBOutlet InitialisationController *initialisationController;

@end

および didFinishLaunchingWithOptions メソッド:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self.window addSubview:navigationController.view];
    [self setInitialisationController:[[InitialisationController alloc] initWithNibName:@"InitialisationController" bundle:nil]]; 
    //self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    //[self.navigationController pushViewController:initialisationController animated:YES];
    [self.navigationController.view addSubview:[[self initialisationController] view]]; 

    return YES;  
}

誰かが少しでも考えを持っていますか?

ありがとう!

4

3 に答える 3

1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    self.initialisationController = [[InitialisationController alloc] initWithNibName:@"InitialisationController" bundle:nil]];
    navigationController = [[UINavigationController alloc] initWithRootViewController:self.initialisationController];
    [self.window addSubview:[navigationController view]];
    [self.window makeKeyAndVisible];
    return YES;
}

これはあなたに役立つと思います。

于 2012-06-15T13:50:10.913 に答える
0

を除いて、インターフェイスビルダーを使用している場合、上記のプロパティはまったく必要ありませんUIWindow。IB に移動し、右向きの矢印をUINavigationControllerストーリーボードの最初にドラッグします。

これUIWindowで、AppDelegate のルート ビューとしてナビゲーション コントローラーが作成されます。

その後、applicationDidDinishLaunching メソッドは空白にする必要があります。

アプリのセットアップ方法はわかりませんが、ほとんどの場合、UIWindow は AppDelegate によって初期化されるため、それを行う必要はありません。新しいプロジェクトを作成し、AppDelegate のボイラー プレート コードを確認することをお勧めします。そこにあるメソッドのほとんどはUIApplicationDelegateプロトコルからのものであり、アプリケーションの実行における重要なイベントに関する情報を提供するためのものであり、手動で設定するためのものではありません。したがって、これらのメソッドはほとんど空白です。

参照: UIApplicationDelegate プロトコル リファレンス http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html

于 2012-06-15T14:08:01.773 に答える
0

UINavigationController を初期化すると、次のようになります

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:[self initialisationController]];

この行も削除します

[self.navigationController.view addSubview:[[self initialisationController] view]]; 
于 2012-06-15T13:44:50.943 に答える