iPhone SDK:无法指定导航控制器的视图

iPhone SDK:无法指定导航控制器的视图,iphone,objective-c,controller,navigation,Iphone,Objective C,Controller,Navigation,我正在开发我的第一个iPhone应用程序,并取得了良好的进展。但有一件事我就是不明白 当我的应用程序启动时,它会显示一个UIView,其中包含一些功能。这个很好用。该屏幕上的一个按钮应该加载一个新的view HistoryViewController,其中包含一个导航控制器 问题是…只要加载HistoryViewController,应用程序就会崩溃,因为没有视图。这是真的,因为在xib文件中,我无法将文件所有者的视图连接到任何内容: 我肯定在某个地方缺乏知识,但经过数小时的研究,我一直无法解

我正在开发我的第一个iPhone应用程序,并取得了良好的进展。但有一件事我就是不明白

当我的应用程序启动时,它会显示一个UIView,其中包含一些功能。这个很好用。该屏幕上的一个按钮应该加载一个新的view HistoryViewController,其中包含一个导航控制器

问题是…只要加载HistoryViewController,应用程序就会崩溃,因为没有视图。这是真的,因为在xib文件中,我无法将文件所有者的视图连接到任何内容:

我肯定在某个地方缺乏知识,但经过数小时的研究,我一直无法解决这个问题

有什么提示吗?
谢谢大家!

通常您会:

点击底线历史表视图控制器HTVC,在inspector窗口中指定一个NIB名称——这意味着您必须首先创建一个新的NIB。 或

双击底线HTVC,弹出320x480预览窗口,然后从库中拖动UIView。 使用第一种方法,您告诉视图控制器动态加载NIB作为要连接的视图,使用第二种方法,您使用IB为视图控制器执行此操作。然后,您拖入的视图将显示为底线HTVC的子视图

编辑要实际加载您创建的nib文件,请执行此操作以推送视图控制器:

    UIViewController *controller = [[UIViewController alloc] autorelease];
    [controller initWithNibName:@"nibfilename" bundle:nil];
    [self.navigationController pushViewController:controller animated:YES];

如果需要,用UIViewController替换您自己的视图控制器类,并用nib的文件名减去扩展名替换nibfilename

很难说你到底有什么问题,但我会给你一些建议

当在interface builder中为此创建导航控制器或选项卡控制器时,很容易不理解实际发生的情况,因此我的建议暂时删除interface builder,让我们在代码中构建它

一般来说,我真的不喜欢在interface builder中构建UI导航控制器或选项卡视图控制器,我真的只是构建视图本身,并在代码中创建UINavigationController

您有一个视图,其中显示了希望包含在UINavigationController中的HistoryTableViewController,因此执行此操作的代码是:

- (void) showHistory 
{
      HistoryViewController *historyVC = [[HistoryViewController alloc] init];
      // If you create historyviewcontroller in nib
      // HistoryViewController *histroyVC [[HistoryViewController alloc] initWithNibName:@"myNib" bundle:nil];

      UINavigationController *navController = [[UINavigationController alloc] initWithRootController:histroyViewController];
      [self presentModalViewContoller:navController animated:YES];
}

这将创建一个导航控制器,将历史视图控制器显示为根视图控制器。再简单不过了。

好提示,谢谢!但我还没到那里。也许你能再帮我一次?IB中定义的内容:我在iPhone中得到的内容:显然与导航栏中没有显示的项目不同,HistoryTableViewController的内容也不同,它在正常的基于导航的应用程序中运行良好。感谢每一个小小的帮助谢谢你走了一条捷径——你必须做我在底线上说的事情,历史表视图控制器。还以为我提了三次?!嗯…我想我以前都做了,但是贴错了图片。这是在IB:但我还是得到了空屏幕:感谢你的帮助。我真的被困在这里了…谢谢你的更新。现在,当我点击按钮时,什么都没有发生,甚至控制台上的一个条目也没有。无论如何,非常感谢你的耐心和帮助。我现在就去睡一觉,希望明天会好一些:-凌晨1:30在欧洲这里。@mdvs-你的回答没有解释任何事情,但你没有解释为什么他需要用某种方式去做。这就是我认为当您开始时,代码路线会更好的方式-您了解事情是如何工作的,然后您可以理解IB。感谢您的快速回复!嗯……这正是我的密码。现在发生了我之前对答案的评论:IB中定义了什么://我在iPhone中得到了什么:IB是一个快速解决问题的完美工具。不必要的程序化创建可能没有优化,并且容易出现其他问题。例如内存泄漏,代码示例的作用。每一份alloc或副本都应该有一份发布或autorelease@Manuel:查看我关于如何加载您创建的nib文件的更新答案。@mvds是的,我知道它正在泄漏。我以后会处理的。当你了解事情的运作方式时,IB是完美的。当你只使用IB构建东西时,很难理解它。是的,我的示例泄漏了,但它不是要被使用,它只是一个示例,来理解UINavigationController是如何工作的。