Objective-C,Storyboard:instantiateViewControllerWithIdentifier返回nil

时间:2012-05-02 06:37:13

标签: objective-c xcode4 storyboard

我有一个UITableViewController,其中有一个storyboard push segue,它从原型单元格链接到一个详细页面,一个普通的旧UIViewController。在故事板中,细节ViewController具有标识符,并且segue具有与细节标识符相同的标识符,除了第一个字母是小写的。此外,详细的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行代替,它可以工作,但屏幕全黑。

无论如何,我已经读过这篇文章并尝试了一些不同的东西,但我仍然受到了阻碍。有没有人有任何建议?

1 个答案:

答案 0 :(得分:25)

问题是您没有从故事板中实例化主视图控制器(UITableViewController),因此其storyboard属性为零。