应用程序变为活动状态时,didUpdateLocations中的Exc_bad_access

时间:2014-03-25 09:25:49

标签: ios iphone exc-bad-access cllocationmanager cllocation

在我的iOS7应用程序中,我有一个名为ICVModel的单例。当应用程序启动时,此单例初始化并创建CLLocationManager,立即开始更新位置。这很好,CLLocationManagerICVModel中的强大属性。我已实施didUpdateLocations:以始终将最后一个位置保存到此单身人士的ICVModel强属性。

我的问题是,当应用程序转到后台并再次变为活动状态时,我总是在didUpdateLocations:

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

此外,我的应用程序使用基于区域的通知,因此,在这种情况下,当应用程序处于后台(并且ICVModel已取消分配?)时,是否可能调用此方法?

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

1 个答案:

答案 0 :(得分:0)

修正了它。问题出在其他方面。在一个ViewController中,我为这个lastLocation属性更改添加了一个观察者并没有删除它...当应用程序转到后台时,VC被解除分配(我手动完成)但单例仍在运行并且试图调用observeValueForKeyPath: ofObject:on deallocated object( - > EXC_BAD_ACCESS)。

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

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

并修复了它:

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

感谢大家的帮助,希望这对至少有人帮助......