1

ビューベースのテンプレートを使用して簡単なアプリケーションを作成し、viewController ファイルのビュー didload メソッド内に nslog のみを配置し、( appDelegate 内の) applicationDidFinishLaunch メソッド内に nslog のみを配置して、どのクラス ファイルが最初に呼び出されたかを確認しました。

実行後: viewController 最初に実行してから appdelegate ..しかし、最初に appdelegate を実行してから、必要に応じて他のものを呼び出す必要があると思います ... plz は適切な理由を教えてください。

--i は appDelegate(inside application didFinishLaunch) で viewController (オブジェクトを作成しませんでした) を呼び出さなかったことに注意してください。私はios4を使用しています

4

2 に答える 2

2

View Controller が AppDelegate のプロパティである場合、コード リファレンスと同様

@interface AppDelegate_Shared : NSObject <UIApplicationDelegate, UIAlertViewDelegate, OMFDataLoadDelegate> {

    NSManagedObjectModel *managedObjectModel;
    NSManagedObjectContext *managedObjectContext;       
    NSPersistentStoreCoordinator *persistentStoreCoordinator;

    UIWindow *window;

    UITabBarController *tabBarController;

}

次に、割り当て時に AppDelegate によって割り当てられている可能性があります。Apple のドキュメントによると、ビューがメモリにロードされた後に viewDidLoad が実行されますが、これは少し混乱する可能性があります。

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW25

期待した結果を得るには、NSLog ステートメントを viewDidAppear に移動します。ステートメントがロードされると予想される方法を示す 2 つのサンプル スニペットを次に示します。

ViewController.m

- (void) viewDidLoad {
  NSLog(@"1st - this occurs when appDelegate allocates this object");
}
- (void) viewDidAppear {

  NSLog(@"3rd - this should appear after the applicationDidFinishLaunchingStatement");
}

AppDelegate_Shared.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    NSLog(@"2. Starting AppDelegate_Shared");

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

    NSLog(@"4. Leaving AppDelegate_Shared");
    return YES;
}
于 2010-08-20T06:23:24.223 に答える
0

初期ビューがロードされていない場合は、明らかにアプリケーションの起動が完了していません。

メッセージは正しい順序で送信されます。

于 2010-08-20T07:58:55.097 に答える