2

我有一个UISwitch用于在后台服务中使用navigation controller. 如果我拿出我的应用程序,它运行良好,但是当我打开按钮并移回main window位置跟踪停止时。

我使用了以下代码,

-(IBAction)startTracking:(id)sender{
if(startTrackingButton.on){
   [locationManager startUpdatingLocation];}
else{
   [locationManager stopUpdatingLocation];
}}

- (void)viewDidLoad{
 [super viewDidLoad];
 locationManager = [[CLLocationManager alloc] init];
 [locationManager setDelegate:self];
 [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];}

有什么建议么?

4

1 回答 1

3

发生这种情况是因为当您弹回导航堆栈时,您的 locationManager(以及您的 UISwitch 和 UIViewController)对象正在被释放。

要确认这一点,请使用开关将此方法添加到您的 viewController。

- (void) dealloc 
{

  NSLog(@"Object being destroyed");
}

如果当您移回“主视图”时打印“对象被破坏”,那么您就知道问题所在了。

要解决此问题,请将带有开关的 UIViewController 设为主 UIViewController 的属性,这样该对象将在应用程序的整个生命周期内创建一次,您可以根据需要弹出和推送它。

您还应该将您的 pushViewController 代码包装成这样,创建一个属性来存储您的 switchViewController伪代码

if(self.switchViewController)
{
    NSLog(@"switchViewController Already Created");
    [navigationController pushViewController:self.switchViewController];
}
else 
{
    self.switchViewController = [[UIViewController alloc] init];
    [navigationController pushViewController:switchViewController];
}

如果您不检查 switchViewController 属性是否已经实例化,那么您最终每次都会创建一个新实例。

约翰

于 2013-08-15T10:02:25.163 回答