从另一个控制器做一个segue

时间:2012-10-20 20:22:27

标签: objective-c delegates tableview uistoryboard segue

这是我的情况。我有两个表视图。在一个视图中搜索两个tableview后,我找到了解决方案来制作2个额外的控制器。即tbl1DatasourceDelegate和tbl2DatasourceDelegate。现在,当我按下一个单元格时,它应该转到另一个viewController。我在tbl1DatasourceDelegate中有这段代码。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    PlayerNews *news = [_tableSource objectAtIndex:indexPath.row];
    PlayerDetailController *detail =[[PlayerDetailController alloc]init];

    [detail setNewsItem:news];
}

因此,当我选择一个Cell时,我会创建一个playerNewsObject并将其发送回我的Controller,其中包含2个tableviews。当我回到我的控制器中时,其中有两个tableviews。 (我从中控制的控制器)我执行函数 setNewsItem 在这里你可以看到代码。

 -(void)setNewsItem:(PlayerNews *)newsItem{
        if(![_newsItem isEqual:newsItem]){
            _newsItem = newsItem;
        }
       NSLog(@"Player detail controller newsItem object: %@", _newsItem);
       [self performSegueWithIdentifier:@"PlayerDetailNews" sender:tblNews];

    }

执行此代码是因为我的日志显示了我在tableview上推送的newsItem。但它不会贬低它。我正在使用以下prepareForSegue。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"comes in this segue");
    // ask NSFRC for the NSMO at the row in question
    if ([segue.identifier isEqualToString:@"PlayerDetailNews"]) {
        [segue.destinationViewController setImageURL:[NSURL URLWithString:_newsItem.image]];
        [segue.destinationViewController setNewsTitle:_newsItem.title];
        [segue.destinationViewController setNewsDescription:_newsItem.content];
        [segue.destinationViewController setNewsCopy:_newsItem.image_copyright];
        [segue.destinationViewController setNewsUrl:_newsItem.url];
        [segue.destinationViewController setNewsShortDescription:_newsItem.summary];
    }
}

这种方法没有,因为它不打印日志。它崩溃时出现以下错误。

** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<tblPlayerNewsDatasourceDelagete: 0x1e5e44c0>) has no segue with identifier 'showPlayerDetailNews''

有人能帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:0)

无法启动segue的两个原因:

1)segue标识符的拼写错误。仔细检查Storyboard中使用的标识符和代码。附注:标识符在故事板中不必是唯一的,仅适用于每个视图控制器。假设您有viewcontroller A ,其中segue为 B ,viewcontroller C 且segue为 B ,它们是允许使用相同的标识符。

2)尝试启动一个未连接到UIViewController的segue,你试图从中启动它。例如:你有segue'segueA',它将viewcontroller A 连接到 B 。在这种情况下,您可以使用[self performSegueWithIdentifier:@"segueA" sender:nil]的唯一地方是 A