0

由于存在多种情况需要从导航堆栈中弹出视图控制器,因此我有一种方法可以实现此功能,并且可以从三个不同的位置调用它。无法将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:。

这怎么可能?

回答

0

的解决方案是这样的:

我有我的视图控制器设置(这是一个有些奇怪,我知道,是什么我试图改变/修复,如果你将在这里看到我的问题的方式: Can't allocate CLLocationManager),CLLocationManager被分配,委托集等在viewDidAppear中。我在应用程序中提供了一个MFMessageComposeViewController,当它被解散时,再次调用viewDidAppear,重新分配CLLocationManager并导致我的问题。有一点布尔魔术,我调整了viewDidAppear代码,以便CLLocationManager只设置和分配一次。

0

这最可能的原因是locationManager在这一点上是nil。第一条规则:始终使用访问器;除了在initdeallloc之外,不要直接访问您的ivars。

我从你的描述怀疑是该对象(具有dismissSelfCon)期间dealloc不明确locationManager.delegate,那你被不调用dismissSelfCon释放。

+0

我想通了,现在发布解决方案。 –