因为在多种情况下我想从导航堆栈中弹出一个视图控制器,所以我有一个方法可以做到这一点,并且可以在三个不同的地方调用它。

- (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 ”打印到控制台),但是位置管理器不会停止发送位置更新! 另外,由于委托未设置为nil,因此应用程序崩溃,因为视图控制器从其为其委托的对象之一接收responsesToSelector:。

这怎么可能?

===============>>#1 票数:0

这最可能的原因是此时的locationManagernil 第一条规则:始终使用访问器; 除了initdeallloc之外,不要直接访问您的deallloc

根据您的描述,我怀疑该对象(带有dismissSelfCon对象)在dealloc期间不会清除locationManager.delegate ,并且您在不调用dismissSelfCon情况下被释放。

===============>>#2 票数:0 已采纳

解决方案是这样的:

我设置视图控制器的方式(我知道这有点奇怪,如果您在这里看到我的问题: 无法分配CLLocationManager ,我正在尝试更改/修复它),正在分配CLLocationManager, viewDidAppear中的委托集等。 我在应用程序期间展示了MFMessageComposeViewController,当它被关闭时,再次调用viewDidAppear,重新分配了CLLocationManager并引起了我的问题。 借助一点布尔魔术,我调整了viewDidAppear代码,以便仅将CLLocationManager设置和分配一次。

  ask by eric.mitchell translate from so

未解决问题?本站智能推荐: