无法将CLLocationManager委托设置为无
由于存在多种情况需要从导航堆栈中弹出视图控制器,因此我有一种方法可以实现此功能,并且可以从三个不同的位置调用它。无法将CLLocationManager委托设置为无
- (void)dismissSelfCon {
NSLog(@"dismiss");
[locationManager stopUpdatingHeading];
[locationManager stopUpdatingLocation];
locationManager.delegate = nil;
mapView.delegate = nil;
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[[Trail_TrackerAppDelegate appDelegate] navCon] popViewControllerAnimated:YES];
}
在一种情况下,如果MapView获得置于其上的注释(我不知道这是决定性的特点,但我认为这是),这种方法称为(我敢肯定它被调用是因为@“dismiss”被打印到控制台),但位置管理器不会停止发送位置更新!另外,因为委托没有设置为零,所以应用程序崩溃是因为视图控制器从它是委托的对象之一接收到respondsToSelector:。
这怎么可能?
的解决方案是这样的:
我有我的视图控制器设置(这是一个有些奇怪,我知道,是什么我试图改变/修复,如果你将在这里看到我的问题的方式: Can't allocate CLLocationManager),CLLocationManager被分配,委托集等在viewDidAppear中。我在应用程序中提供了一个MFMessageComposeViewController,当它被解散时,再次调用viewDidAppear,重新分配CLLocationManager并导致我的问题。有一点布尔魔术,我调整了viewDidAppear代码,以便CLLocationManager只设置和分配一次。
这最可能的原因是locationManager
在这一点上是nil
。第一条规则:始终使用访问器;除了在init
和deallloc
之外,不要直接访问您的ivars。
我从你的描述怀疑是该对象(具有dismissSelfCon
)期间dealloc
不明确locationManager.delegate
,那你被不调用dismissSelfCon
释放。
我想通了,现在发布解决方案。 –