很抱歉,如果这个问题已经得到解答,但我找不到答案。
我正在创建一个应用程序,其中我有一个UITableViewController,当选择单元格右侧的附件按钮时,应创建一个包含在.xib文件中找到的接口的UIViewController的新实例。然后,新的UIViewController将被推送到堆栈并显示。 我的问题是如何从现有的.xib文件创建新的UIViewController?
这是我到目前为止所尝试的: 在Xcode中:文件 - >新文件 - > Cocoa Touch Class - > 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”。
代码编译得很好,但是当我在模拟器中运行并按下一个附件按钮时,它会因未捕获的异常而终止。
我错过了什么?
提前致谢
答案 0 :(得分:2)
你不应该这样做:
DetailViewController
*detailViewController = (DetailViewController*)[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
如果不是,你会收到编译器警告吗?
答案 1 :(得分:1)
错误发生在我试图显示的新视图中。在.xib文件中,我插入了一个MKMapView,当我删除它时,一切都很完美。
再次感谢您帮我调试!