2015-12-30 4 views
5

Я пытаюсь получить обновления местоположения даже во всех штатах, даже когда приложение убито/завершено/приостановлено. Я включил фоновый выбор в xcode и реализовал следующий код (используется ссылка «Capture location in all states app»). Но когда я заканчиваю приложение, он дает красную строку в классе AppDelegate. Я не понимаю, в чем проблема. Я сделал это, используя решение вопроса «Getting location for an iOS app when it is in the background and even killed» здесь, но его не работает в ios 9.Пожалуйста, помогите мне или скажите мне другое решение.Обновление местоположения, даже когда приложение убито/завершено

ОБНОВЛЕНО КОД -

class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate { 

var window: UIWindow? 
var locationManager: CLLocationManager? 
var significatLocationManager : CLLocationManager? 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { 
    if(UIApplication.sharedApplication().backgroundRefreshStatus == UIBackgroundRefreshStatus.Available){ 
     print("yessssss") 
    }else{ 
     print("noooooo") 
    } 

    if let launchOpt = launchOptions{ 
     if (launchOpt[UIApplicationLaunchOptionsLocationKey] != nil) { 
      self.significatLocationManager = CLLocationManager() 
      self.significatLocationManager?.delegate = self 
      self.significatLocationManager?.requestAlwaysAuthorization() 
      if #available(iOS 9.0, *) { 
       self.significatLocationManager!.allowsBackgroundLocationUpdates = true 
      } 
      self.significatLocationManager?.startMonitoringSignificantLocationChanges() 

     }else{ 

      self.locationManager   = CLLocationManager() 
      self.locationManager?.delegate = self 
      self.locationManager?.requestAlwaysAuthorization() 
      if #available(iOS 9.0, *) { 
       self.locationManager!.allowsBackgroundLocationUpdates = true 
      } 

      self.locationManager?.startMonitoringSignificantLocationChanges() 
     } 

    }else{ 

     self.locationManager   = CLLocationManager() 
     self.locationManager?.delegate = self 
     self.locationManager?.requestAlwaysAuthorization() 
     if #available(iOS 9.0, *) { 
      self.locationManager!.allowsBackgroundLocationUpdates = true 
     } 

     self.locationManager?.startMonitoringSignificantLocationChanges() 

    } 

    return true 
} 



func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){ 

    let locationArray = locations as NSArray 
    let locationObj = locationArray.lastObject as! CLLocation 
    let coord = locationObj.coordinate 
     } 


func applicationDidEnterBackground(application: UIApplication) { 

    if self.significatLocationManager != nil { 

     self.significatLocationManager?.startMonitoringSignificantLocationChanges() 
    }else{ 

     self.locationManager?.startMonitoringSignificantLocationChanges() 
    } 


} 
+1

Возможный дубликат: http://stackoverflow.com/questions/30396367/getting-location-for-an-ios-app-when-it-is-in-the-background -and-even-killed –

+1

* «Это красная строка в классе AppDelegate» * - это описание худших и наименее полезных описаний ошибок. Отправьте сообщение об ошибке здесь. Если вы запускаете приложение через Xcode, это нормально, если появляется красная линия, если вы принудительно завершаете приложение. – luk2302

+0

Да, я решительно прекратил действие приложения, и эта красная ошибка строки отображается, но я не получаю обновление местоположения при завершении приложения. В чем проблема? – Kirti

ответ

0

Проверить этот учебник: http://mobileoop.com/getting-location-updates-for-ios-7-and-8-when-the-app-is-killedterminatedsuspended

И исходный код здесь: https://github.com/voyage11/GettingLocationWhenSuspended

Надеется, что вы получите ответ. Это работает для меня. Теперь я пытаюсь сделать http-запрос, когда вызывается функция doUpdateLocations, чтобы я мог сохранять текущее местоположение пользователя на сервере, когда приложение не работает (приостановлено/завершено/убито).

Я не думаю, что яблоко разрешено делать любой HTTP-запрос, когда приложение приостановлено/прекращено. Но если сервер получил запрос на обновление местоположения, тогда я согласен с этим. Потому что мне не нужен ответ с сервера. Нужно много испытаний ....