我使用基于视图的模板制作了一个简单的应用程序。我在viewController文件中只将nslog放在view didload方法中,并在applicationDidFinishLaunch方法(在appDelegate中)中检查哪个类文件首先被调用。
在我得到的运行之后:viewController首先运行然后appdelegate ..但我认为appdelegate首先应该根据需要调用其他的... plz给我正确的解释。
注意到 - 我没有在appDelegate中调用viewController(没有创建对象)(在应用程序内部执行didFinishLaunch)。我正在使用ios4
答案 0 :(得分:2)
如果您的View Controller是AppDelegate的属性,则类似于代码引用
@interface AppDelegate_Shared : NSObject <UIApplicationDelegate, UIAlertViewDelegate, OMFDataLoadDelegate> {
NSManagedObjectModel *managedObjectModel;
NSManagedObjectContext *managedObjectContext;
NSPersistentStoreCoordinator *persistentStoreCoordinator;
UIWindow *window;
UITabBarController *tabBarController;
}
然后它可能在AppDelegate被分配时被分配。根据Apple文档viewDidLoad在视图加载到内存后运行,这可能有点令人困惑,因为语言可以让你相信它被加载到屏幕上。
将您的NSLog语句移动到viewDidAppear以获得您期望的结果。这里有两个示例代码段,其中包含您希望加载语句的方式。
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;
}
答案 1 :(得分:0)
如果初始视图未加载,那么应用程序尚未完成启动。
消息以正确的顺序发送。