2012-02-08 103 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方法在子类,如果你已经实现了它。