在我的iOS7应用程序中,我有一个名为ICVModel的单例。当应用程序启动时,此单例初始化并创建CLLocationManager
,立即开始更新位置。这很好,CLLocationManager
是ICVModel
中的强大属性。我已实施didUpdateLocations:
以始终将最后一个位置保存到此单身人士的ICVModel
强属性。
我的问题是,当应用程序转到后台并再次变为活动状态时,我总是在didUpdateLocations:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
[ICVModel sharedSingleton].lastLocation = [locations lastObject]; //EXC_BAD_ACCESS
}
此外,我的应用程序使用基于区域的通知,因此,在这种情况下,当应用程序处于后台(并且ICVModel已取消分配?)时,是否可能调用此方法?
我不知道为什么......非常感谢!
答案 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"];
}
感谢大家的帮助,希望这对至少有人帮助......