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

我想通了,現在發佈解決方案。 –