【问题标题】:How do I create UIViewController using Xib-file?如何使用 Xib 文件创建 UIViewController?
【发布时间】:2011-01-05 14:02:17
【问题描述】:

对不起,如果这个问题已经得到解答,但我找不到答案。

I'm creating an app in which I have an UITableViewController and when the accessorybutton in the right side of a cell is selected a new instance of a UIViewController should be created containing the interface found in a .xib-file.然后新的 UIViewController 将被推送到堆栈并显示。 我的问题是如何从现有的 .xib 文件创建新的 UIViewController?

这是我迄今为止尝试过的: 在 Xcode 中:文件 -> 新建文件 -> Cocoa Touch 类 -> UIViewController 子类。 未选中复选框“UITableViewController 子类”。 选中“使用 XIB 作为用户界面”复选框。

这将创建一个 .m、一个 .h 和一个 .xib 文件。我在 .xib 文件的“视图”中创建了一个用户界面。在界面生成器中选择“文件的所有者”会在“类标识”中显示新创建的 UIViewController。

一些代码:

在 DetailViewController.m(新的 UIViewController)中:

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

在 SubViewController.m(旧的 UITableViewController)中:

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
     DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
     //Exception thrown at line below
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
}

忘了说 .xib 文件的名称是“DetailViewController.xib”。

代码编译得很好,但是当我在模拟器中运行它并按下一个附件按钮时,它由于未捕获的异常而终止。

我错过了什么?

提前致谢

【问题讨论】:

  • 在 Xcode 中,为 objc_exception_thrown 设置一个断点,以便 GDB 在抛出异常时停止,这样您就可以看到堆栈跟踪和一些您可能需要的洞察信息。
  • 另外,在控制台中你应该得到一个关于未捕获异常的日志。将其添加到您的问题中,因为它通常会提供有关问题所在的重要线索。
  • 好的,我是 Xcode 的新手,所以我会研究一下。但它应该以这种方式工作吗?我不远了? initWithNibName 方法和所有这些似乎都是正确的?

标签: iphone uiviewcontroller interface-builder


【解决方案1】:

你不应该这样投射:

DetailViewController
*detailViewController = (DetailViewController*)[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

如果没有,您会收到编译器警告吗?

【讨论】:

    【解决方案2】:

    错误出现在我试图显示的新视图中。在 .xib 文件中,我插入了一个 MKMapView,当我删除它时,它一切正常。

    再次感谢您帮我调试!

    【讨论】:

    • 顺便说一句,如果你想要一个 MKMapView,你应该使用 MapKit 框架
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多