【问题标题】:Doing a segue from another controller从另一个控制器执行 segue
【发布时间】:2012-10-20 20:22:27
【问题描述】:

这是我的情况。我有两个表视图。在搜索了在一个视图中使用两个 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];
}

所以当我选择一个单元格时,我会创建一个 playerNewsObject 并将其发送回我的控制器,其中包含 2 个表格视图。当我回到我的控制器中时,里面有两个表视图。 (我从中分离的控制器)我执行函数 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''

谁能帮帮我?

谢谢

【问题讨论】:

    标签: objective-c delegates tableview uistoryboard segue


    【解决方案1】:

    无法启动 segue 的两个原因:

    1) segue 标识符的拼写错误。仔细检查情节提要中使用的标识符和您的代码。旁注:标识符在故事板中不必是唯一的,仅适用于每个视图控制器。假设您有一个视图控制器 AB 接续,而视图控制器 CB 接续,它们是允许有相同的标识符。

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

    【讨论】:

      猜你喜欢
      • 2019-02-02
      • 2016-09-20
      • 2016-08-15
      • 2020-01-20
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多