我一直在使用Xcode中的iPad的SplitView模板。以下是基于拆分视图的应用程序模板自动生成的许多重要方法中的两个...
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
执行获取请求。
非常感谢您的帮助!我会继续研究和玩代码。
答案 0 :(得分:4)
在模板应用程序中-applicationDidFinishLaunching将RootViewController的视图添加到窗口,导致视图加载,所以很明显-viewDidLoad将跟随 - applicationDidFinishLaunching。
从applicationDidFinishLaunching(间接)调用ViewDidLoad。
正如你所说的那样,在applicationDidFinishLaunching之前调用viewDidLoad是因为你在调用applicationDidFinishLaunching之前已经做了一些事情来导致视图加载。
您是否在-viewDidLoad中添加了断点并查看堆栈跟踪以查看负责调用它的内容?
答案 1 :(得分:2)
您在哪里初始化RootViewController
?通常,您在applicationDidFinishLaunching
(至少在iPhone上)这样做。如果您在应用委托的init
方法中对其进行初始化,则可能导致在viewDidLoad
applicationDidFinishLaunching.
方法
答案 2 :(得分:2)
这是因为在MainWindow.xib中,您的应用程序委托对象未连接到File的所有者(UIApplication)这一事实。您可以打开MainWindow.xib并右键单击App Delegate,查看它是否在引用Outlet到File的所有者中有连接。如果没有,请将其设置为。这将解决您的问题。