加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – unwind segue / performSegueWithIdentifier:问题

发布时间:2020-12-14 18:56:24 所属栏目:百科 来源:网络整理
导读:在我的应用程序中,有一个聊天服务.当用户想要给某人发新消息时,他按下“新聊天”并显示表视图控制器以从朋友列表中进行选择.我正在使用展开segue以返回到前一个视图控制器并在两个视图控制器之间共享数据(主要是数据将是与之聊天的朋友). unwind segue完美运
在我的应用程序中,有一个聊天服务.当用户想要给某人发新消息时,他按下“新聊天”并显示表视图控制器以从朋友列表中进行选择.我正在使用展开segue以返回到前一个视图控制器并在两个视图控制器之间共享数据(主要是数据将是与之聊天的朋友). unwind segue完美运行,但是在我的应用程序中,当用户返回主VC时,我会启动一个新的segue,以便直接转到用户聊天的另一个VC;这不起作用.所有的segues连接都很好,我在每个角落尝试了NsLog,它进入那里甚至是prepareForSegue:正在被访问.我试过放一个NsTimer,认为可能存在一些技术冲突,但它没有用.我将segue更改为聊天VC到模态,现在它给了我这个错误:

Warning: Attempt to present on whose view is not in the window hierarchy!

我可以通过其他方式访问此VC,它位于层次结构中.我的问题是:可能出现什么问题?放松segues会改变Windows层次结构吗?

图片:

为了更直观地呈现问题,我正在谈论的主要VC是在左下方连接到导航视图控制器.当用户按下新聊天时,会显示右上角的两个VC(一个用于选择朋友或组,另一个用于显示朋友/组).因此,当从右上角选择一个朋友说VC时,我应该将segue解开到主VC.正如你从主VC看到的还有其他的segues.如果我放松segue它们可以工作,如果我正常运行它们会工作.

解决方法

它不起作用并且给你错误的原因是因为事情没有按照你认为的顺序发生.

当展开发生时,可见的视图还没有被解散,因此你试图在一个视图上执行一个segue,这个视图实际上并不像错误所说的那样在层次结构中,例如,将NSLog语句放在最终视图中然后在主视图控制器的unwind方法中,您可以看到以下内容:

2013-11-27 14:51:10.848 testUnwindProj[2216:70b] Unwind
2013-11-27 14:51:10.849 testUnwindProj[2216:70b] Will Appear
2013-11-27 14:51:11.361 testUnwindProj[2216:70b] View Did Disappear

因此,主视图中的展开被调用,视图将出现(您的主视图控制器),然后您的可见视图被取消.这可能是一个简单的修复:

@interface ViewController () {
    BOOL _unwindExecuted;
}

@end

@implementation ViewController

- (void)viewWillAppear:(BOOL)animated
{
    NSLog(@"Will Appear");
    if (_unwindExecuted) {
        _unwindExecuted = NO;
        [self performSegueWithIdentifier:@"afterunwind" sender:self];
    }
}

- (IBAction)unwind:(UIStoryboardSegue *)segue
{
    NSLog(@"Unwind");
    _unwindExecuted = YES;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读