2015-09-12 4 views
25

Il codice seguente dovrebbe ottenere la posizione corrente. Ma sopra l'errore è generato. La funzione didUpdateLocations non viene mai chiamata.Errore IOS 9 Dominio = Codice kCLErrorDomain = 0 "(null)"

Esecuzione su un dispositivo (iPhone 5s) iOS 9.1. Info.plist ha le funzionalità del dispositivo richieste e la privacy - Descrizione dell'uso della posizione configurata come mostrato nell'immagine allegata. Per favore aiuto!

let locationManager = CLLocationManager() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    locationManager.delegate = self 
    locationManager.requestAlwaysAuthorization() 
    locationManager.requestLocation() 
} 


func locationManager(manager: CLLocationManager, 
    didFailWithError error: NSError) 
    print(error.description) 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations 
     locations: [CLLocation]) {   
print(“got location”) 
} 

Info.plist

+0

Ehi trova una soluzione per questo –

+0

Ciao @ utente1848653: Potresti contrassegnare la mia risposta come accettata? Molto spesso ricevo +1 e darebbe maggiore visibilità per aiutare gli sviluppatori con questo errore. – H4Hugo

+0

Si prega di controllare anche sul dispositivo reale. Stavo anche affrontando lo stesso problema, ma sta lavorando su un dispositivo reale. – Chandni

risposta

34

Si prega di provare questo:

Vai a:

  • prodotto -> Scheme -> Modifica schema -> Opzioni -> Consenti Località simulazione devono essere controllati e prova a fornire una posizione predefinita, non lasciarla impostata su "nessuno"

MODIFICA: Come menzionato nei commenti, riavvia anche Xcode e il gioco è fatto!

Spero che questo aiuti.

+1

Posso confermare che funziona. Ho avuto esattamente lo stesso problema menzionato nella domanda originale e mentre "Consenti simulazione posizione" è stato selezionato ho avuto il percorso predefinito impostato su none. Cambiando questo in un percorso predefinito e riavviando Xcode risolto il problema. – tmarkiewicz

+5

Questo ha funzionato anche per me * dopo * Ho riavviato Xcode. – user212514

+0

@ user212514 Ho affrontato nuovamente questo errore su un altro progetto, ho utilizzato il metodo che ho fornito per correggerlo e non ho dovuto riavviare Xcode. Puoi confermare che stavi visualizzando lo stesso messaggio di errore? – H4Hugo

4

Se l'avviso di autorizzazione posizione non viene visualizzato, provare ad aggiungere NSLocationAlwaysUsageDescription al plist come stringa di testo. Inoltre, fare lo stesso per NSLocationWhenInUseUsageDescription.

1

Avevo lo stesso problema con un'app che stavo passando da 8.0 a 9.0/9.1. Ho provato un paio di cose come scrivere la porzione CLLocationManager solo in Swift e un nuovo progetto Obj-C. L'ho anche testato su diversi dispositivi. Per risolvere il problema sul dispositivo, ho rimosso la funzione didFailWithError. Che ferma l'errore del tutto. Questo potrebbe non sembrare l'idea migliore, ma in IOS9 puoi limitare la tua applicazione a dispositivi dotati di GPS o servizi di localizzazione. Android ha fatto questo per molto tempo. Ho anche notato nel tuo .plist che non sono abilitate le autorizzazioni per NSLocationALwaysUsageDescription o le proprietà NSLocationWhenInUseUsageDescrtiption incluse.

Solo per riferimento ho allegato ciò che il mio attuale programma .plist sembra non generare questo errore e un blocco di codice in obj-c il file del controller. Il codice inizia alla fine di una funzione precedente e quindi ha il delegato commentato didFailWithError e il didUpdateLocations. Attualmente questo sta lavorando con successo in IOS 9,1

 //Get map authorization 
    [CLLocationManager locationServicesEnabled]; 
    locationManager = [[CLLocationManager alloc]init]; 
    locationManager.delegate = self; 
    locationManager.allowsBackgroundLocationUpdates = YES; 
    if(nil == locationManager) locationManager = [[CLLocationManager alloc]init]; 
    if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { 
     [locationManager requestAlwaysAuthorization]; 
    } 
    //locationManager.distanceFilter=10; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

    [locationManager startUpdatingLocation]; 



//- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 
//{ 
// NSLog(@"didFailWithError: %@", error); 
// UIAlertView *errorAlert = [[UIAlertView alloc] 
//        initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
// [errorAlert show]; 
//} 

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ 


    NSLog(@"LocationUpdated: %@",[locations lastObject]); 
    [self updateMapMarkers]; 

// NSDate* eventDate = location.timestamp; 
// NSTimeInterval howRecent = [eventDate timeIntervalSinceNow]; 
// if(fabs(howRecent) < 15.0){ 
//  [self updateMapMarkers]; 
// } 

} 

.plist image

2

ricerca google vero le risposte questo sembra essere un problema in quanto iOS4.0.

in XCODE 7.1 in Project => scheme => edit scheme.

in Esegui => Opzioni => Posizione principale/disabilita Consenti simulazione posizione.

nel simulatore IOS in Debug => Posizione selezionare una posizione. Questo ha risolto il problema per me.

0

Ho questi suggerimenti per le persone che utilizzano le mappe di Apple nella loro applicazione

  1. Non sempre contare su risultati del simulatore, perché sempre non darà risultati esatti.
  2. Per tutti i test di debug e esecuzione delle mappe su dispositivi reali.
  3. Come in xcode 8 (a mia conoscenza) è sufficiente collegare il dispositivo iOS al sistema ed eseguire direttamente l'app.
  4. Anche per il problema di cui sopra la soluzione è la stessa, basta provare con dispositivi reali il problema verrà risolto.