我一直在玩Xcode中的iPad SplitView模板。這裏有兩個是自動生成的由基於視圖的拆分應用程序模板爲您的許多重要方法...爲什麼我的應用程序委託的didFinishLaunchingWithOptions方法突然被稱爲AFTER我的RootViewController:viewDidLoad方法?
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
方法方法被調用。我是iPhone新手,但我認爲這是正確和典型的順序。因此,這裏是我所做的更改...
- 一旦我證實了一切工作沒有任何修改,我改變了RootViewController的代碼,並將其設置爲
UIViewController
(而不是UITableViewController
默認情況下)子類,並提出相應的在Interface Builder中進行調整。我建立並運行,一切仍然正常工作。 - 然後,我在IB的RootView中添加了一個UIView(沒有任何內容),當我建立並運行它時,突然
RootViewController:viewDidLoad
在application:didFinishLaunchingWithOptions
方法之前被調用。
我需要得到它回到它是因爲之前工作的方式,你可以在代碼中看到,viewDidLoad方法取決於didFinishLauchingWithOptions方法來執行,因此它可以設置RootViewController的的managedObjectContext
,它用來執行取回請求。
- 任何想法是什麼造成了這種情況?
- 任何想法如何解決這個問題?
非常感謝您的幫助!我會繼續研究和玩代碼。
謝謝,eman!基於SplitView的應用程序模板不會爲RootViewController生成任何初始化代碼,至少我沒有在任何地方看到它。所以,由於我是新開發的iPad,並且基於自學到目前爲止,我將假設RootViewController的初始化邏輯嵌入在主窗口的nib文件中,因爲大部分UI都是在IB,對嗎? – BeachRunnerFred 2010-05-18 03:49:38