使用 unwind segues 推送数据

Posted

技术标签:

【中文标题】使用 unwind segues 推送数据【英文标题】:Pushing data with unwind segues 【发布时间】:2015-01-04 04:20:00 【问题描述】:

我有一个正在使用的 unwind segue,然后我有一个准备用于推送数据的 segue。 我需要 unwind segue 来推送数据,但我在组合它们时遇到了问题。 这是展开的 segue 代码 -

- (IBAction)unwindFromDetailViewController:(UIStoryboardSegue *)segue 
    // ViewController *detailViewController = [segue sourceViewController];
    NSLog(@"%@", segue.identifier);

这是segue代码的准备-

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    if ([segue.identifier isEqualToString:@"showRecipeDetail"]) 
        NSIndexPath *indexPath = nil;
        Recipe *recipe = nil;
        if (self.searchDisplayController.active) 
            indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
            recipe = [searchResults objectAtIndex:indexPath.row];
         else 
            indexPath = [self.tableView indexPathForSelectedRow];
            recipe = [recipes objectAtIndex:indexPath.row];
        

        PersonDetailTVC *destViewController = segue.destinationViewController;
        destViewController.recipe = recipe;

        [self dismissViewControllerAnimated:YES completion:nil];
    

这是我尝试的方法,它正在展开 segue,但不推送数据。

- (IBAction)unwindFromDetailViewController:(UIStoryboardSegue *)segue 
    if ([segue.identifier isEqualToString:@"CustomTableCell"]) 
        NSIndexPath *indexPath = nil;
        Recipe *recipe = nil;
        if (self.searchDisplayController.active) 
            indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
            recipe = [searchResults objectAtIndex:indexPath.row];
         else 
            indexPath = [self.tableView indexPathForSelectedRow];
            recipe = [recipes objectAtIndex:indexPath.row];
               

        PersonDetailTVC *destViewController = segue.destinationViewController;
        destViewController.recipe = recipe;

        [self dismissViewControllerAnimated:YES completion:nil];
    

【问题讨论】:

你一直在转发同样的问题,但我已经将你引导到这篇文章,并提供了许多关于同一主题的答案——“我可以在展开 segue 时返回数据吗?” ***.com/q/13038622/2274694 。我建议你检查一下。 如果你的问题没有得到回答,我建议你把同样的问题重新发布 3 次,让它更清楚。 您是否专门为您的 unwind segue 设置了标识符?我怀疑您只是在使用您的 segue 标识符,并且您在 prepareForSegue 中的 if ([segue.identifier isEqualToString:@"showRecipeDetail"]) 返回 false ,因此该块根本没有执行。 (这一行:[self dismissViewControllerAnimated:YES completion:nil]; 完全没有必要。) 【参考方案1】:

您的问题相当不完整,所以我只能根据假设来回答......

首先,这个方法应该在你要返回的视图控制器中。

- (IBAction)unwindFromDetailViewController:(UIStoryboardSegue *)segue 


其次,使用您的 prepareForSegue: 方法,而不是您的 unwindFromDetailViewController: 方法(属于第一个视图控制器),从第二个视图控制器传递您的数据。我相信尽管您在 if ([segue.identifier isEqualToString:@"showRecipeDetail"]) 语句中使用了前向转场标识符而不是展开转场标识符,但它因此返回 false,因此您的 prepareForSegue: 方法中的整个块根本没有执行。 (这一行:[self dismissViewControllerAnimated:YES completion:nil]; 完全没有必要,因为只要一切都正确连接,展开就会自动发生。)所以现在尝试删除条件,看看数据是否按预期传递,例如:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

    NSIndexPath *indexPath = nil;
    Recipe *recipe = nil;
    if (self.searchDisplayController.active) 
        indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
        recipe = [searchResults objectAtIndex:indexPath.row];
     else 
        indexPath = [self.tableView indexPathForSelectedRow];
        recipe = [recipes objectAtIndex:indexPath.row];
    

    PersonDetailTVC *destViewController = segue.destinationViewController;
    destViewController.recipe = recipe;

如果你想重新添加一个条件来指定检查你的 segue 的标识符,你必须专门为 unwind segue 设置一个标识符。

【讨论】:

我尝试了你建议的 prepareforsegue,但它仍然没有通过 unwind segue 传递信息,我不知道我是否只是不明白你在说什么或什么。但它仍然什么都不做。 就像我说的那样,您的问题不完整,例如:unwindFromDetailViewController: 在您要展开的视图控制器中吗?你确定你的segue设置正确吗?您确定正在调用prepareForeSegue 吗?您是否设置了断点或 nslog 来检查?您如何确定数据尚未通过?您需要提供更多信息... 我在我正在展开的视图控制器中有展开 segue 并在我正在展开的视图控制器中有 prepareforsegue,但是没有推送 segue 我应该如何将信息从第二个传递到第一个放松的?\ @mattsuff 展开是自动的。 (我自己测试过。一切都对我有用。传递数据等) @mattsuff 我建议更新您的问题(不要更改您的原始代码,因为这会使未来的答案寻求者感到困惑),而是添加您在 PersonDetailTVC 中使用的代码以检查从另一个视图控制器传回的新数据。

以上是关于使用 unwind segues 推送数据的主要内容,如果未能解决你的问题,请参考以下文章

iOS从推送segue中检测unwind segue

适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue

从 Unwind segue 触发时,Push segue 不起作用

使用 unwind segue 从文本字段传递数据的问题

为啥我的 unwind segue 回退太远了?

在容器视图中导航时,Unwind Segue 不起作用