2012-11-03 46 views
0

我有一个基于tableview的导航控制器。根视图控制器有一个+按钮,用于添加一个新项目。这会导致视图控制器的推送过程,允许用户输入新项目的数据。不能从unwind segue动作弹出

在此视图控制器上,左上方的导航栏项是标有“返回”按钮的标准。我已经将“保存”[bar]按钮[item]作为右上方的导航栏项目。

我创建了一个展开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

哪一类是unwindFromGoalEdit:?它看起来像你可能已经将它添加到“新项目”视图控制器...此方法应放置在根视图控制器中,并且不需要调用popToViewController。这里有一个空方法就足够了。

0

问题可能是您有一个保留周期。展开后自动弹出其上方的每个视图,除非它不能。你不会放松自己。所以,添加一个日志到你期望在dealloc方法中弹出的视图控制器,或者一个断点。如果没有触发,那么你知道视图控制器没有被弹出。这几乎肯定意味着你有一个保留周期。看看你的代表或你正在将自己(父母)传递到任何地方的任何地方。顶视图控制器不应该有一个强有力的参考它的父母。实际上,由于这个原因,任何孩子都不应该强烈地提到父母。如果这样做,放松将无法正常工作。