Sto cercando di ottenere aggiornamenti sulla posizione anche in tutti gli stati, anche quando l'app viene uccisa/interrotta/sospesa. Ho abilitato il recupero dello sfondo in xcode e implementato il seguente codice (riferimento usato "Capture location in all states app"). Ma quando chiudo l'app, sta dando una riga rossa sulla classe AppDelegate. Non capisco qual è il problema qui. Ho fatto questo usando la soluzione della domanda "Getting location for an iOS app when it is in the background and even killed" qui, ma non funziona in iOS 9.Si prega di darmi una mano o di dirmi l'altra soluzione.Aggiornamento della posizione anche quando l'app viene uccisa/terminata
codice aggiornato -
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()
}
}
Possibile duplicato: http://stackoverflow.com/questions/30396367/getting-location-for-an-ios-app-when-it-is-in-background -and-even-killed –
* "sta dando una linea rossa sulla classe AppDelegate" * - che è la peggiore e meno utile descrizione degli errori. Si prega di inviare il messaggio di errore qui. Se hai eseguito la tua app tramite Xcode, è normale che venga visualizzata la "linea rossa" se interrompi forzatamente l'app. – luk2302
Sì, interrompo con forza l'app e viene visualizzato questo errore di linea rossa, ma non ricevo l'aggiornamento della posizione sull'app di chiusura. Qual è il problema qui? – Kirti