2012-02-08 105 views
0

在我的基於導航應用,initWithNibName方法不叫/火initWithNibName ....方法不點火

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
    // Custom initialization 
} 
return self; 
} 

我在的appdelegate定義RootViewController的(calViewController)這樣

calViewController *objCalViewController = (calViewController *) [navController topViewController]; 

objCalViewController.context = [self managedObjectContext]; 


[window addSubview:navController.view]; 
[window makeKeyAndVisible]; 

這是問題嗎?請給我一個幫助

+0

你如何創建視圖控制器?你的第一個代碼段是什麼類? – jrturton 2012-02-08 10:15:54

回答

1

做這樣

calViewController *objCalViewController = [[calViewController alloc] initWithNibName:@"WebViewController_iPhone" bundle:nil]; 
objCalViewController.managedObjectContext = self.managedObjectContext; 
navController = [[UINavigationController alloc] initWithRootViewController:objCalViewController]; 
[self.window setRootViewController:navController]; 
[window makeKeyAndVisible]; 
10

當你的UIViewController在筆尖文件或故事板(通常爲IBOutlet)定義,initWithNibName:bundle:不叫,而initWithCoder:是。當您使用Interface Builder將UIViewController設置爲UITabBarControllerUINavigationController的一部分時,並且幾乎總是在使用情節提要時,就是這種情況。

在appdelegate.m
+0

是的!我從nib文件加載UIViewController。目前我正在做viewDidLoad和viewWillAppear方法中的大部分內容,所以我的應用程序消耗大量內存(給出內存警告)。如果我重寫initWithCoder:方法,我能克服那些高內存消耗嗎?或者還有另一種更好的方法? – sajaz 2012-02-08 10:19:27

+0

這有點讓人誤解,你的意思是來自_storyboard_而不是?如果你有一個獨立的視圖控制器xib,你可以使用initWithNibName來加載它。 – jrturton 2012-02-08 10:19:33

+0

@sajaz它不會與你的內存消耗有所幫助,但如果一切都從筆尖(或情節串連圖板)加載,它將使用'的initWithCoder:'。這包括自定義的'UIView'子類。 – 2012-02-08 10:22:10

0

確定可以說我有一個名爲的viewController與TCViewController

TCViewController.h, TCViewController.m and TCViewController.xib 

TCViewController.m 我正在重寫以下方法。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

在我的RootViewController的,我想如果你初始化的viewController這樣初始化TCViewController這樣

RootViewController.m

-(void)viewDidLoad //not necessarily this one, can be any method 
{ 
// This initialization calls the initWithNibname method implemented in TCViewController.m 
TCViewController *viewController = [[TCViewController alloc] initWithNibName:@"TCViewController" bundle:nil]; 

[self.navigationController pushViewController:viewController animated:YES]; 


} 

,控制將傳遞到initWithNibName方法在子類,如果你已經實現了它。