2014-03-25 82 views
0

在我的iOS7应用程序中,我有一个名为ICVModel的单例。当应用程序启动时,此单身人士将被初始化并创建CLLocationManager,立即开始更新位置。这工作正常,CLLocationManagerICVModel的强大财产。我实施了didUpdateLocations:,总是把最后的位置保存到ICVModel在这个单身人士身上的强大财产。当应用程序变为活动状态时,didUpdateLocations中的Exc_bad_acces

我的问题是,当应用程序被切换到后台与比再次变得活跃,我一直在didUpdateLocations:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    [ICVModel sharedSingleton].lastLocation = [locations lastObject]; //EXC_BAD_ACCESS 
} 

而且我的应用程序获得EXC_BAD_ACCESS采用基于区域的通知,所以是不是可以在这这种方法在应用程序处于后台时调用(并且ICVModel被释放?)?

我不知道为什么......非常感谢!

+0

这可能会帮助你http://stackoverflow.com/questions/327082/exc-bad-access-signal-received –

+0

更可能其中之一是零,你可以把NSLog放在代码行的前面以显示他们的内容 – Flexicoder

+0

我认为你的单例实现有问题,但肯定设置了一个异常断点,并看到回溯 – sage444

回答

0

修正了它。问题在于别的。在一个ViewController中,我为这个lastLocation属性更改添加了一个观察者,并没有删除它......当应用程序进入后台时,VC被释放(我手动执行),但单例仍在运行,并且正在尝试调用observeValueForKeyPath: ofObject:取消分配的对象( - > EXC_BAD_ACCESS)。

基本上,这导致了该问题(在某些VC):

[[ICVModel sharedSingleton] addObserver:self 
           forKeyPath:@"lastLocation" 
            options:NSKeyValueObservingOptionNew 
            context:NULL]; 

和这个固定:

- (void)viewDidDisappear:(BOOL)animated { 
    [[ICVModel sharedSingleton] removeObserver:self 
            forKeyPath:@"lastLocation"]; 
} 

谢谢大家的帮助,并希望这将帮助至少有人...

相关问题