iOS 6 - 以编程方式触发Unwind Segue什么都不做

All*_*eng 3 objective-c ios uistoryboard segue uistoryboardsegue

在我的应用程序启动时,它以编程方式显示使用segue的LoginViewController.视图控制器以模态方式呈现,过渡设置为交叉溶解.验证成功后,我想通过以编程方式触发展开segue来关闭登录视图.所以我把它添加到我的头文件中:

- (IBAction)unwindSegue:(UIStoryboardSegue *)segue;
Run Code Online (Sandbox Code Playgroud)

现在在IB中,我可以控制 - 从"文件所有者"LoginViewController拖动到"退出"按钮并选择unwindSegue:.这将创建一个手动segue,它会在Connections检查器中显示File文件所有者和Exit按钮.然后我点击IB中场景中新创建的Unwind segue,然后给它起一个名字.如果我单击"转到"按钮进行展开segue操作,它会转到上面提到的声明.

到目前为止一切顺利,我在GCD块中成功验证后触发了这个解开segue:

....
dispatch_async(dispatch_get_main_queue(), ^
{
    [self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self];

    [self.spinner removeFromSuperview];
    self.spinner = nil;
});
Run Code Online (Sandbox Code Playgroud)

.....并且当它运行时没有任何反应.微调器确实被正确删除,但没有迹象表明unwind segue正在执行.

执行中的断点unwindSegue:永远不会被击中.没有抛出任何错误.什么都没有写入控制台.标识符是正确的,我三重检查(否则它将失败).

我在这里,这里这里看了答案,但我似乎没有错过任何东西.

我做了什么,虽然注意到,是Xcode认为unwindSegue:挂钩: 联系? 没联系?

我无法从前面的小空圈拖动并将其unwindSegue:链接到"退出"按钮.

任何帮助将不胜感激.

Mat*_*ias 8

如果您使用模态segue转到登录视图,则需要返回的就是打电话

[self dismissViewControllerAnimated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

更确切地说,你应该在演示控制器(你的第一个控制器)上调用它,但如果你在现有的控制器上打电话,它将被转发.您可以使用完成块进行任何所需的清理.没有必要使用GCD.

编辑

要回答其他评论:我不能确定你的描述,但似乎你已经在呈现的控制器而不是在呈现控制器上实现了展开动作.展开segue允许在调用者处做某事(例如,设置数据)而无需额外的协议.