我一直在 Xcode 中使用 iPad 的 SplitView 模板。以下是基于 Split View的应用程序模板为您自动生成的许多重要方法中的两个...
AppNameAppDelegate.m
#pragma mark -
#pragma mark Application lifecycle
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after app launch
rootViewController.managedObjectContext = self.managedObjectContext;
// Add the split view controller's view to the window and display.
[window addSubview:splitViewController.view];
[window makeKeyAndVisible];
return YES;
}
RootViewController.m
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {
[super viewDidLoad];
self.clearsSelectionOnViewWillAppear = NO;
self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
当您在进行任何更改之前构建并运行项目时,
application:didFinishLaunchingWithOptions
方法在 RootViewController:viewDidLoad
之前调用方法被调用。我是 iPhone 开发的新手,但我假设这是正确且典型的顺序。所以这是我所做的更改...UIViewController
的子类(而不是 UITableViewController
默认情况下)并在 Interface Builder 中进行了相应的调整。我构建并运行,一切仍然正常。 RootViewController:viewDidLoad
在 application:didFinishLaunchingWithOptions
之前被调用方法。 我需要让它恢复到之前的工作方式,因为正如您在代码中看到的那样,viewDidLoad 方法依赖于 didFinishLauchingWithOptions 方法来执行,因此它可以设置 rootViewController 的
managedObjectContext
它用于执行获取请求。非常感谢您的帮助!我将继续研究和使用代码。
最佳答案
在模板app中-applicationDidFinishLaunching将RootViewController的view添加到窗口中,导致view加载,所以很明显-viewDidLoad会跟在-applicationDidFinishLaunching后面。
ViewDidLoad 是(间接)从 applicationDidFinishLaunching 调用的。
如果如您所说, viewDidLoad 在 applicationDidFinishLaunching 之前被调用,那是因为您在调用 applicationDidFinishLaunching 之前做了一些事情来导致 View 加载。
您是否在 -viewDidLoad 中添加了断点并查看堆栈跟踪以查看调用它的原因?
关于xcode - 为什么在我的 RootViewController :viewDidLoad method? 之后突然调用我的应用程序委托(delegate)的 didFinishLaunchingWithOptions 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2853589/