【发布时间】:2012-05-02 06:37:13
【问题描述】:
我有一个 UITableViewController,它带有一个故事板推送序列,从原型单元链接到一个详细页面,一个常规的旧 UIViewController。在故事板中,detail ViewController 有一个标识符,segue 有一个标识符,它与 detail 标识符相同,只是第一个字母是小写的。此外,详细 ViewController 在类下拉列表中选择了一个“自定义类”(AttractionDetailViewController)。
不起作用。问题是instantiateViewControllerWithIdentifier:@"AttractionDetails 返回nil。
相关代码。首先是调试器从未进入过的prepareForSegue方法。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"attractionDetails"])
{
AttractionDetailViewController *attrDetailVC = [segue destinationViewController];
}
}
相反,它进入了这个方法:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//AttractionDetailViewController *attrDetailVC = [[AttractionDetailViewController alloc] init];
AttractionDetailViewController *attrDetailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"AttractionDetails"];
NSIndexPath *selIndexPath = [self.tableView indexPathForSelectedRow];
attrDetailVC.theAttraction = [attractions objectAtIndex:indexPath.row];
[self.navigationController pushViewController:attrDetailVC animated:YES];
}
由于instantiateViewControllerWithIdentifier 返回nil,它当然会抛出异常。真正有趣的是,如果我改用alloc init 行,它可以工作,但屏幕全黑。
无论如何,我已经阅读了有关此内容并尝试了一些不同的方法,但我仍然受到阻碍。有人有什么建议吗?
【问题讨论】:
-
嗯,确实如此。我什至没有想过要检查,因为我以某种方式到达了
self(这是从根导航控制器向下的第三个视图)。我尝试了这个,它似乎可以解决问题:UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];。谢谢!
标签: objective-c xcode4 storyboard