我有一个基于tableview的导航控制器。根视图控制器有一个+按钮,用于添加新项目。这导致对视图控制器的推送,其允许用户输入新项目的数据。
在此视图控制器上,左上角的导航栏项是标有“后退”按钮的标准。我已将“保存”[条形图]按钮[项目]设置为右上角的导航栏项目。
我创建了一个展开IBAction推送视图控制器。
然后我从“保存”按钮控制拖动到视图控制器上的出口,并将其连接到展开IBAction。
当我点击“保存”按钮时,将调用此展开操作。
但是,我在展开操作中没有做任何操作会弹出视图控制器。这是一个小代码:
- (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];
}
在下面的展开操作中,我尝试了各种方法来弹出视图控制器。但没有任何反应。没有运行时错误,没有。但我确实看到了NSLog()所以我知道它被调用了。
思想?
答案 0 :(得分:2)
问题可能是你有一个保留周期。展开会自动弹出其上方的每个视图,除非它不能。你不会从自己放松中弹出任何东西。因此,将日志添加到您希望在dealloc方法或断点中弹出的视图控制器中。如果没有触发,那么您就知道视图控制器没有被弹出。这几乎肯定意味着你有一个保留周期。查看您的代表或您将自己(父母)传递到一个区块的任何地方。顶视图控制器不应该强烈引用它的父级。实际上,出于这个原因,任何孩子都不应该强烈提及其父母。如果它放松将无法工作。
答案 1 :(得分:0)
哪个班级是unwindFromGoalEdit:
?看起来您可能已将其添加到“新项目”视图控制器中...此方法应放在根视图控制器中,并且无需调用popToViewController。一个空方法就足够了。