2017-06-11 1 views
0

Je n'utilise actuellement que le simulateur, mais j'ai des problèmes avec CoreLocation dans swift sur le simulateur iOS. Je reçois des mises à jour de position imprimées par ce code, mais jamais en en-tête. Je ne veux pas de cours, j'essaie de faire une application de type boussole qui montrera une orientation à une cible.Peut obtenir l'emplacement, mais pas le titre

class CompassViewController: UIViewController, CLLocationManagerDelegate { 

    var lm:CLLocationManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     print ("view did load") 

     lm.delegate = self; 
     lm.desiredAccuracy = kCLLocationAccuracyBest 
     lm.requestWhenInUseAuthorization() 
     lm.startUpdatingLocation() 
     lm.startUpdatingHeading() 

    } 

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     var locValue:CLLocationCoordinate2D = manager.location!.coordinate 
     var course = manager.location!.course 
       print("locations = \(locations)") 
    } 

    func headingManger(_ manager: CLLocationManager, didUpdateHeading: [CLHeading]) { 
     var heading = manager.heading?.magneticHeading 
     print("heading = \(heading)") 
    } 

} 

J'ai essayé quelques combinaisons de cela. J'ai essayé de faire une fonction qui traitait à la fois de l'emplacement et du cap, mais qui n'obtenait aucune impression de données. J'ai aussi essayé d'avoir la fonction headingManager, mais rien n'a été imprimé. Ce code actuel comme ci-dessus affichera l'emplacement, mais pas l'en-tête.

Comment puis-je me rendre au travail?

+1

Obtenir un en-tête nécessite un périphérique avec une boussole, dont le simulateur n'a pas. –

+0

Donc, est le seul moyen de tester des applications avec boussole sur l'appareil? –

+1

Oui, vous aurez besoin d'un appareil avec une boussole intégrée. –

Répondre

2

Compass ne figure pas dans la liste des interactions matérielles prises en charge par le simulateur et CLLocationManager headingAvailable signale qu'il n'est pas disponible sur le simulateur.

En outre, dans ce doc:

http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html

Certains services de localisation exigent la présence de matériel spécifique du périphérique donné. Par exemple, les informations d'en-tête ne sont disponibles que pour les périphériques contenant une boussole matérielle. Cette classe définit plusieurs méthodes que vous pouvez utiliser pour déterminer quels services sont actuellement disponibles. Plus précisément CLLocationManager a cette propriété de classe pour vérifier si la boussole est disponible:

  • (BOOL) headingAvailable Si je lance ceci sous le simulateur:

print ("headingAvailable: (Int (CLLocationManager. headingAvailable())) ") Sorties:

08/11/2011 22: 38: 26,873 Craplet [39975: B603] headingAvailable: 0

+0

Ok, je cours maintenant ce même code sur mon téléphone, mais toujours seulement l'emplacement ne se dirige pas. –

+0

vous devez configurer la fonction Boussole dans le téléphone, puis essayez ce code .. cela va fonctionner – Optimus

+0

Comment faites-vous cela? –

0

David,

On m'a référé à votre question, qui n'était pas la réponse. Ce fut ...

didUpdateHeading heading never called under iOS 11

Je ne sais pas si votre iOS 11 en cours d'exécution, la bêta était de l'ordre en Juin je pense, mais certainement pas sorti jusqu'en Septembre 2017, mais peut-être cette espère.