【发布时间】:2011-12-13 10:17:30
【问题描述】:
是否总是以编程方式或 IB 调用 initWithNibName?
例子:
我有两个viewController,一个叫PhotoViewController,另一个叫ViewController。 PhotoViewController 以编程方式创建视图,但未注释 initWithNibName。
这是我的 PhotoViewController.m:
- (void)loadView
{
NSLog(@"loadView in PhotoView");
UIView *view = [[UIView alloc] initWithFrame:[UIScreen
mainScreen].applicationFrame];
[view setBackgroundColor:[UIColor redColor]];
self.view = view;
[view release];
}
// Loading views from a nib file.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
NSLog(@"PhotoViewController initWithNibName=%@",nibNameOrNil);
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
这是我在 ViewController.m 中的调用
- (void) doSearchFlickr
{
PhotoViewController *pController = [[PhotoViewController alloc]init];
[self.view addSubview:pController.view];
[pController release];
}
然后我在日志中看到一些让我感到困惑的东西:
2011-10-23 10:52:52.151 TableViewPG[1192:b303] PhotoViewController initWithNibName=(null)
2011-10-23 10:52:52.153 TableViewPG[1192:b303] loadView in PhotoView
根据第 30 页的 ViewControllerPGforiPhoneOS,如果我以编程方式覆盖 loadView,则不应调用 initWithNibName。
我的逻辑有什么缺陷吗?
【问题讨论】:
标签: objective-c uiviewcontroller