Próbuję uzyskać aktualizacje lokalizacji nawet we wszystkich stanach, nawet gdy aplikacja jest zabijana/usuwana/zawieszana. Włączyłem pobieranie w tle w kodzie Xcode i zaimplementowałem następujący kod (użyte odniesienie "Capture location in all states app"). Ale kiedy kończę aplikację, daje czerwoną linię na AppDelegate klasy. Nie rozumiem, jaki jest tutaj problem. Zrobiłem to przy użyciu rozwiązania pytania "Getting location for an iOS app when it is in the background and even killed" tutaj, ale nie działa ono w ios 9. Proszę mi pomóc lub powiedzieć mi inne rozwiązanie.Aktualizacja lokalizacji, nawet gdy aplikacja zostanie zabita/zakończona.
zaktualizowanego kodu -
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()
}
}
Możliwe duplikaty: http://stackoverflow.com/questions/30396367/getting-location-for-an-ios-app-when-it-is-in-the-background i nawet zabity –
* "daje czerwoną linię na AppDelegate klasy" * - jest to najgorszy i najmniej pomocny opis błędu. Proszę opublikować komunikat o błędzie tutaj. Jeśli uruchomiłeś aplikację za pośrednictwem Xcode, normalne jest, że "czerwona linia" pojawia się, jeśli wymusisz zamknięcie aplikacji. – luk2302
Tak, wymuszam zakończenie aplikacji i pojawia się ten błąd w postaci czerwonej linii, ale nie otrzymuję aktualizacji lokalizacji w sprawie zakończenia aplikacji. Jaki jest problem? – Kirti