【问题标题】:Confusion about initWithNibName and loadView关于 initWithNibName 和 loadView 的困惑
【发布时间】: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


    【解决方案1】:

    -[UIViewController init] 只是执行[self initWithNibName:nil bundle:nil]。您可以通过在 -[PhotoViewController initWithNibName:bundle:] 中放置一个断点并查看调用堆栈来轻松检查这一点。

    您的-[PhotoViewController loadView] 很好。

    View Controller Programming Guide for iOS 在第 30 页上没有提及 initWithNibName:bundle:

    【讨论】:

    • 谢谢。对向导的话有误解。我现在知道这个概念了。
    猜你喜欢
    • 2014-10-30
    • 2017-12-04
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2020-03-06
    • 2016-03-16
    相关资源
    最近更新 更多