ios - 无法从展开的 segue Action 中弹出

标签 ios uistoryboardsegue

我有一个基于表格 View 的导航 Controller 。 Root View Controller 有一个 + 按钮,可以添加一个新项目。这会导致向 View Controller 推送 segue,允许用户输入新项目的数据。

在这个 View Controller 上,左上角的导航栏项目是标有“返回”按钮的标准。我已经放置了一个“保存”[bar] 按钮 [item] 作为右上角的导航栏项目。

我创建了一个展开的 IBAction 推送 View Controller 。

然后我按住控制键从“保存”按钮拖动到 View Controller 上的导出并将其连接到展开的 IBAction。

当我点击“保存”按钮时,将调用此展开操作。

但是,我在展开操作中所做的任何事情都不会弹出 View Controller 。这是一个小代码:

- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender     {

   return YES;
}

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {

   NSLog( @"Should seque from %@", identifier );
   return YES;
}

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

}

- (IBAction)unwindFromGoalEdit:(UIStoryboardSegue *)segue {

   NSLog( @"UNWINDING!!");

   [self.navigationController popToViewController:segue.destinationViewController animated:YES];
}

在下面的展开操作中,我尝试了各种方法来弹出 View Controller 。但是没有任何反应。没有运行时错误,什么都没有。但是我确实看到了 NSLog(),所以我知道它正在被调用。

想法?

最佳答案

问题可能是你有一个保留周期。 unwind 会自动弹出其上方的每个 View ,除非它不能。你自己不会从放松中弹出任何东西。因此,将日志添加到您希望在 dealloc 方法或断点中弹出的 View Controller 。如果那没有触发,那么您就知道 View Controller 没有被弹出。这几乎肯定意味着你有一个保留周期。查看您的代表或您将自己(父级)传递到 block 中的任何地方。顶 View Controller 不应该对其父级有强引用。实际上,出于这个原因,任何 child 都不应该强烈引用其 parent 。如果确实如此,放松将不起作用。

关于ios - 无法从展开的 segue Action 中弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13214321/

相关文章:

objective-c - 你如何连接完全用代码创建的 View Controller 中的事件,没有 Interface Builder?

ios - iPhone 上的视频保存在哪里?

ios - 如何在展开功能中执行segue

ios - 具有本地化字符串格式的字符串

ios - 如何在 swift iOS 中读取并记录图像的原始像素

objective-c - 从 Apple 指南中理解 "Referring to Instance Variables"时出现问题

ios - 在 UITableView 中切换选项卡时防止从内存中删除覆盖 Controller

ios - 正确的segue流程

ios - UIStoryboard Reference 和 Root View Controller

ios - 来自 appDelegate 时的 performSegue 错误