2013-01-12 26 views
0

我在Objective C中有点弱我承认,我的最终目标是将数据从ViewController3传递回ViewController1。事实上,这部分已经完成并取得成功。但是,当调用[self.navigationController popToRootViewControllerAnimated:YES]时,我得到EXC_BAD_ACCESS。使用委托时弹出ViewControllers

ViewController1 <ViewController2Delegate> 
- (void) didAddEventLocation:(Event *)event { 
    NSLog(@"Event name = %@", event.name); //Shows name successfully 
} 

ViewController2 <ViewController3Delegate> 
- (void) didAddEvent:(Event *)event { 
    [self.delegate didAddEventLocation:event]; 
} 

ViewController3 
[self.delegate didAddEvent:event]; 
[self.navigationController popToRootViewControllerAnimated:YES]; 

对不起格式错误的代码,只是想简化。做[self.navigationController popViewControllerAnimated:YES]没有问题,但它只需要我ViewController2。我知道我在这里做了一些非常错误的事情,但是我不知道如何解决它。如果我需要澄清,请告诉我。

+0

你肯定'[self.delegate didAddEventLocation:eventTmp]'是正确的,因为参数是'event'? –

+0

是的,很抱歉..当我复制/粘贴我的代码时发生错字。现在编辑。 – xhermit

回答

2

使用僵尸来追捕什么给你EXC_BAD_ACCESS。某些对象已经释放,现在正在弹回到根视图控制器时被调用。

尝试此链接: How do I set up NSZombieEnabled in Xcode 4?

+0

@xhermit是的,这必须解决你的问题。你会看到哪个对象被分配。 – kaspartus

+0

谢谢。我之前使用过Instruments来追捕僵尸,我猜我忘了我应该在我的堆栈追踪中寻找Event Type = Zombie。在弹出导航堆栈之前,我没有调用[self.locationManager stopUpdatingLocation]来追踪它。再次感谢! – xhermit

1

看起来,你的控制器之一(首先在我看来)被释放。在VC3方法中检查self.navigationController是否存在。那么你必须检查他所有的风险投资。我认为没有什么能够持有第一个VC。问题可以通过使用(例如)addChildViewController您的导航控制器的方法,或者如果smth将引用您的控制器来解决。

此外,如果您在两个实例之间存在路径问题,则可以使用NSNotificationCenter从一个实例向另一个实例发送一些信息。

HTH!

+0

[self.navigationController.viewControllers objectAtIndex:x]显示viewControllers,因为我期望他们在堆栈上。 – xhermit