当我“关闭” UISwitch 时,后台位置服务跟踪不会停止

Posted

技术标签:

【中文标题】当我“关闭” UISwitch 时,后台位置服务跟踪不会停止【英文标题】:Background location service tracking not stopping when i "OFF" the UISwitch 【发布时间】:2013-08-20 04:45:57 【问题描述】:

我正在使用 UISwitch 来“开启”和“关闭”定位服务。当我“打开”UISwitch 时,位置服务开始跟踪位置。我可以拿出应用程序,位置服务运行良好。我的问题是当我切换“关闭”跟踪并移动到任何View Controller 时,位置跟踪仍处于“开启”状态并且它没有停止跟踪。下面是我的代码。

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
    CLLocation* location = [locations lastObject];
    latDeg = location.coordinate.latitude;
    longDeg = location.coordinate.longitude;


-(IBAction)startTracking:(id)sender
 if(startTrackingButton.on)
[locationManager startUpdatingLocation];
[[NSUserDefaults standardUserDefaults] setBool:startTrackingButton.on forKey:@"switchValue"];
[[NSUserDefaults standardUserDefaults] synchronize];

else
    [[NSUserDefaults standardUserDefaults] setBool:startTrackingButton.on forKey:@"switchValue"];
  [[NSUserDefaults standardUserDefaults] synchronize];
  [locationManager stopUpdatingLocation];
 


- (void)viewDidLoad
   [super viewDidLoad];
   [startTrackingButton setOn:[[NSUserDefaults standardUserDefaults] boolForKey:@"switchValue"]];
   locationManager = [[CLLocationManager alloc] init];
   [locationManager setDelegate:self];
   [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
   [self.navigationItem setHidesBackButton:YES];

有什么建议吗?

【问题讨论】:

你用调试器测试的Cab,看看是否有[locationManager stopUpdatingLocation];被处决? 我用上面代码-(IBAction)startTracking:(id)sender的else部分验证了它会被执行,但下一行又开始跟踪 看看这个,可能是你的答案:***.com/questions/9469741/… 我尝试了正确停止在该页面中的答案,但是当我保持 UISwitch“打开”并移动到下一页或上一页停止跟踪时 【参考方案1】:

我将假设startTrackingButton 实际上是UISwitch。如果是这种情况,您应该检查isOn 属性。

if (startTrackingButton.isOn) 
    [locationManager startUpdatingLocation];
    [[NSUserDefaults standardUserDefaults] setBool:startTrackingButton.on forKey:@"switchValue"];
    [[NSUserDefaults standardUserDefaults] synchronize];
 else 
    [[NSUserDefaults standardUserDefaults] setBool:startTrackingButton.on forKey:@"switchValue"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [locationManager stopUpdatingLocation];

【讨论】:

以上是关于当我“关闭” UISwitch 时,后台位置服务跟踪不会停止的主要内容,如果未能解决你的问题,请参考以下文章

我的 UIswitch 值为零,即使它打开我必须关闭然后重新打开才能设置值

永不关闭的定位后台服务

UISwitch 在值更改 IOS Swift 时崩溃

使 UISwitch 在打开/关闭时隐藏/取消隐藏标签

后台上传大文件(应用关闭时服务重启)

Android - 如何在服务的后台获取位置更新