iOS 6 – 以编程方式触发Unwind Segue什么也不做

在我的应用程序启动时,它使用segue以编程方式显示LoginViewController。 视图控制器以模态方式呈现,设置为交叉溶解。 成功的身份validation后,我想通过以编程方式触发unwind segue来closureslogin视图。 所以我把这个添加到我的头文件中:

- (IBAction)unwindSegue:(UIStoryboardSegue *)segue; 

现在在IB我能够控制 – 从“文件的所有者”LoginViewController拖动到退出button,并selectunwindSegue: 这将创build一个手动的继续,它显示在正确的文件的所有者和退出button的连接检查器。 然后,我从IB中的场景中单击新创build的Unwind segue,然后为其命名。 如果我点击“去”button来取消放风行动,它会把我带到上面提到的声明。

到目前为止,我在GCD块中成功进行authentication后,触发了这个过程:

 .... dispatch_async(dispatch_get_main_queue(), ^ { [self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self]; [self.spinner removeFromSuperview]; self.spinner = nil; }); 

…..运行时没有任何反应。 微调确实被删除了,但是没有任何放松继续执行的迹象。

unwindSegue:实现的一个突破点unwindSegue:永远不会被击中。 没有错误抛出。 没有任何东西被写入控制台。 标识符是正确的,我三重检查(否则它将失败)。

我看了这里和这里的答案,但我似乎没有遗漏任何东西。

但是我注意到,Xcode认为unwindSegue: 没有联系: 联系?没有链接?

我无法从unwindSegue:前的小空圈拖动,并将其链接到“退出”button。

任何帮助将不胜感激。

如果您正在使用模态search进入您的login视图,您只需要返回即可

 [self dismissViewControllerAnimated:YES completion:nil]; 

更准确地说,您应该在提交控制器(您的第一个控制器)上调用它,但是如果您在提供的控制器上致电,它将被转发。 你可以使用完成块做任何必要的清理。 没有必要使用GCD。

编辑

要回答额外的评论:我不太清楚你的描述,但是你似乎已经在提交的控制器上实现了展开操作,而不是在呈现控制器上。 放松段是允许在呼叫者做一些事情(例如,设置数据)而无需附加协议。

从Apple的技术说明中引用文本Unwind Segue:要添加一个只能以编程方式触发的unwind segue,请从场景的视图控制器图标控制拖动到其退出图标,然后从popup菜单中为新的segueselect展开动作。

链接到技术说明