【问题标题】:How to segue from a custom delegate and datasource如何从自定义委托和数据源中分离
【发布时间】:2012-10-11 01:12:37
【问题描述】:

我有一个包含 2 个表视图的视图。这个视图有控制器 PlayerDetailController 现在要控制 2 个表视图,我还有 2 个其他控制器。

  • tablePlayersDataSourceDelegate
  • tablePlayerNewsDataSourceDelegate

我 ctrl 从 PlayerDetail 视图拖到 newsView 以进行转场。在我的 tablePlayerDataSourceDelegate 中,我有以下方法来执行这个 segue。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   [self performSegueWithIdentifier:@"showPlayerDetailNews" sender:indexPath];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *indexPath = (NSIndexPath *)sender;
    PlayerNews *news = [_tableSource objectAtIndex:indexPath.row]; // ask NSFRC for the NSMO at the row in question
    if ([segue.identifier isEqualToString:@"show detail"]) {
        [segue.destinationViewController setImageURL:[NSURL URLWithString:news.image]];
        [segue.destinationViewController setNewsTitle:news.title];
        [segue.destinationViewController setNewsDescription:news.content];
        [segue.destinationViewController setNewsCopy:news.image_copyright];
        [segue.destinationViewController setNewsUrl:news.url];
        [segue.destinationViewController setNewsShortDescription:news.summary];
    }
}

但是当我测试时出现以下错误。

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

我明白为什么会出现错误。因为 playerDetail 视图使用了 playerDetailController 类,而我试图在 tablePlayerNewsDelegate 类中做 te segue。你可能知道解决它的方法吗?

编辑 在这里,您可以看到我正在谈论的picture

这样就可以在playerDetailView中看到两个tableview了。当点击底部表格视图中的单元格时,它应该转到下一个视图。

EDIT2

这就是我在 playerDetailController 中为填充我的 tableview 所做的。我已经把它放在了我的 viewDidLoad 中。

tabelPlayerNews=[[tblPlayerNewsDatasourceDelagete alloc]init];
[tabelPlayerNews setTableSource:_newsArray];
tblNews.dataSource=tabelPlayerNews;
tblNews.delegate=tabelPlayerNews;
tabelPlayerNews.view=tabelPlayerNews.tableView;

【问题讨论】:

    标签: objective-c ios uitableview delegates datasource


    【解决方案1】:

    我不确定我是否理解,但总的来说......

    要使用performSegueWithIdentifier:,segue 的拖动应该从将进行调用的控制器开始,而不是从视图或其他对象开始。我认为这就是错误消息告诉您的内容:假设您的故事板中有一个名为“showPlayerDetailNews”的segue,它不属于正确的对象。

    【讨论】:

    • 好吧,我再解释一遍。我有一个视图控制器,里面有 2 个表视图。但是这些表视图有一个单独的控制器类用于它们的数据源和委托。在那个控制器中,我使用 performSegueWithIdentifier: 。但是该控制器在情节提要中没有可视化视图。所以我无法从这里 ctrl 拖动它。
    • 我已经编辑了我的问题。我有你需要更多的澄清,请询问。
    • 知道了。我的回答基本相同:segue 的拖动必须从某个 UIViewController 子类开始,并且执行 segue 的调用需要在同一个子类中。 (数据源和委托的存在并不是这个机制的一部分。)
    • 好吧,但是你有什么建议呢?我需要通过下一个视图控制器提供数据。
    • 一旦 segue 工作,请查看向 tablePlayerNewsDataSourceDelegate 询问数据以传递给下一个控制器。从您发布的内容中我不知道PlayerDetailController 是否有指向该对象的链接,但它需要一个链接才能使prepareForSegue: 工作。
    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 2012-12-07
    • 1970-01-01
    • 2011-09-21
    • 2015-03-04
    • 2019-08-14
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多