Я пытаюсь получить обновления местоположения даже во всех штатах, даже когда приложение убито/завершено/приостановлено. Я включил фоновый выбор в 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()
}
}
Возможный дубликат: http://stackoverflow.com/questions/30396367/getting-location-for-an-ios-app-when-it-is-in-the-background -and-even-killed –
* «Это красная строка в классе AppDelegate» * - это описание худших и наименее полезных описаний ошибок. Отправьте сообщение об ошибке здесь. Если вы запускаете приложение через Xcode, это нормально, если появляется красная линия, если вы принудительно завершаете приложение. – luk2302
Да, я решительно прекратил действие приложения, и эта красная ошибка строки отображается, но я не получаю обновление местоположения при завершении приложения. В чем проблема? – Kirti