2015-12-14 5 views
0

Это мой простой текущий код, чтобы получить обновление местоположения:Получения фона места, когда приложение находится в фоновом режиме

class ViewController: UIViewController, CLLocationManagerDelegate { 

    var locationManager: CLLocationManager! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     locationManager = CLLocationManager() 
     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 

     locationManager.requestAlwaysAuthorization() 

     locationManager.startUpdatingLocation() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) { 

     print("in here") 
     if UIApplication.sharedApplication().applicationState == .Active { 
      print("App in Foreground") 

     } else { 

      let Device = UIDevice.currentDevice() 
      let iosVersion = Double(Device.systemVersion) ?? 0 

      let iOS9 = iosVersion >= 9 
      if iOS9{ 
       // This part gives me error which i think is needed to allow background updates in ios9? 
       //locationManager.allowsBackgroundLocationUpdates = YES; 
       //locationManager.pausesLocationUpdatesAutomatically = NO; 
      } 
      //let iOS7 = iosVersion >= 7 && iosVersion < 8 
      print("App is backgrounded. New location is %@", newLocation) 
     } 
    } 


} 

Я добавил NSLocationAlwaysUsageDescription в мой файл Plist и сделал поэтому обновления фона локаций возможны в приложении так нет беспокоится.

Этот код отлично работает при работе в симуляторе как для фона, так и для фона. Затем я хотел попробовать его на своем устройстве, и как только я опишу приложение, он не обновит ни одного местоположения. Я прочитал в нескольких местах, что для прошивки 9 вам нужно добавить этот код:

locationManager.allowsBackgroundLocationUpdates = YES; 

Я пытаюсь поставить его в своем коде в быстры, но я получаю сообщение об ошибке:

Cannot assign value of type 'ObjCBool' to type 'Bool' 

Любых идеи, как это решить?

ответ

2

Вы используете логический литерал Objective-C YES, который импортируется в Swift как тип ObjCBool. Просто переключитесь на использование булевого литерала Swift true, и вам должно быть хорошо идти.

+0

Пробовал, что и перед отправкой. Тогда я получаю эту ошибку: использование неразрешенного идентификатора «TRUE» –

+0

lol mybad. Я использовал заглавные буквы. Я просто подумал подождать минуту, что, если он litteraly означает низкие капиталы. Спасибо: P –

+0

Я все еще не могу получить места, когда приложение находится в фоновом режиме. Я добавил UIBackgroundmodes в «location», а также назвал это if ([[[UIDevice currentDevice] systemVersion] floatValue]> = 9) { _locationManager.allowsBackgroundLocationUpdates = YES; } перед вызовом startUpdatingLocation, но все же метод locationManager delegate «didUpdateToLocation:» не запускается, когда приложение находится в фоновом режиме. Пожалуйста, помогите, если вы обнаружили это решение. –