0

这是我的情况。我有两个表视图。在一个视图中搜索两个表视图后,我找到了制作 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''

有谁能够帮助我?

谢谢

4

1 回答 1

0

无法启动 segue 的两个原因:

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

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

于 2012-10-29T19:37:54.887 回答