0

Xcode 4 に切り替えた後、Xcode 3 とまったく同じようにアプリケーションをビルドして実行できると思いました。

できないことがわかりました。

Xcode 4 には、アプリのビュー コントローラーを表示しない面白い方法がありますが、これは奇妙です。

Apple が最終的に切り替えを強制しようとしていることがわかります。その結果、私のアプリは動作しなくなります。

application:didFinishLaunchingWithOptions:ハングする前に、エラーなしで取得します。最終的に、アプリケーションはデバイスでクラッシュしますが、シミュレーターでは Default.png に永久に残ります。

メソッドを編集して、View Controller自体のインスタンスをインスタンス化し、それをウィンドウに追加できると思いapplication:didFinishLaunchingWithOptions:ましたが、それも機能しなかったことがわかりました。

これで何度も失敗した後-メインビューコントローラー用に個別のUIWindowsを作成-ナビゲーションコントローラーに追加することにしました。

その後、幸運が私を襲いましたが、最も単純な形でしかありませんでした。ログを調べたところ、それapplicationDidBecomeActive:が呼び出されていました。

しかし、いつものように、どんな種類のビューが表示されていても、そのような運はありません。

次に、青色の背景色といくつかの UI 要素 (ボタン、ラベルなど) を持つ UIView をウィンドウに追加して、それが機能するかどうかを確認することにしました。

おかしなことに、そうでした。

しかし、なぜメインのビュー コントローラーを使わないのでしょうか? Xcode 4 でアプリを正常に実行したことは一度もありません (ビルド後にアプリを開いても失敗します)。コンパイラを Xcode 3 と同じものに変更しようとしましたが、うまくいきませんでした。

アプリケーションのView Controllerが表示されない理由について、私は正直に本当に混乱しています。

なぜそれが機能しないのかを試してみたいと思っている人にとっては、ありがたいことです。

AppDelegate のコードは次のとおりです。View Controller のコードが必要な場合は、ここに貼り付けることができますが、2000 行を超えています。

とにかく、ここに.mファイルがあります:

#import "DocumentationAppDelegate.h"
#import "DocumentationViewController.h"

@implementation DocumentationAppDelegate

@synthesize window;
@synthesize viewController;
@synthesize navigationController;

- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"In method %@, which is in class %@.", NSStringFromSelector(_cmd), NSStringFromClass([self class]));
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"In method %@, which is in class %@.", NSStringFromSelector(_cmd), NSStringFromClass([self class]));

}

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

    NSLog(@"In method %@, which is in class %@.", NSStringFromSelector(_cmd), NSStringFromClass([self class]));

    DocumentationViewController *vc = [[DocumentationViewController alloc] init];

    UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:vc];
    controller.navigationBarHidden = YES;

    UIWindow *win = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    [win addSubview:controller.view];
    [win makeKeyAndVisible];

    return YES;
}

- (void)applicationWillTerminate:(UIApplication *)application {

}


- (void)dealloc {
    [window release];
    [super dealloc];
}

@end

そして.h

#import <UIKit/UIKit.h>

@class DocumentationViewController;

@interface DocumentationAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    DocumentationViewController *viewController;
    UINavigationController *navigationController;
}

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet DocumentationViewController *viewController;

@end

誰かがここで私を助けることができれば、それは非常に高く評価されます.

4

1 に答える 1

0

アプリ デリゲートには、プロパティ ウィンドウ、viewController、および navigationController が既にあります。したがって、次のようなapplication:didFinishLaunchingWithOptions:メソッドを持つことができます。

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

    viewController = [[DocumentationViewController alloc] init];
    navigationController = [[UINavigationController alloc] initWithRootViewController:vc];
    navigationController.navigationBarHidden = YES;

    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}
于 2011-07-20T10:48:56.750 に答える