2017-03-20 1 views
1

il montre environ 3 sec et rejeterPourquoi je crée demande l'autorisation emplacement en alerte cadre montrent pas longtemps

mais quand je crée dans la classe normale, il montre tous les temps, puis appuyez sur utilisateur pour répondre Autoriser/pas autoriser

public class Location: NSObject, CLLocationManagerDelegate{ 
    public var locationManager = CLLocationManager() 

    public func RequestLocation(){ 
     self.locationManager.delegate = self 
     if CLLocationManager.authorizationStatus() == .notDetermined { 
      self.locationManager.requestWhenInUseAuthorization() 
     } 

     locationManager.startUpdatingLocation() 
     locationManager.distanceFilter = kCLDistanceFilterNone 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    } 
} 

EDIT - Code de Ajouté OP pour montrer Location instanciation

import UIKit 
import DemoLocation 
class ViewController: UIViewController { 
    deinit { 
     print("deinit") 
    } 

    let location = Location() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     location.RequestLocation() 
    } 
} 
+0

De quel fil vous appelez cette méthode? –

+0

Vous devez vous assurer que votre instance de 'Location' est conservée –

+0

Pouvez-vous montrer le code utilisé pour créer un' Location'? –

Répondre

0

En effet, dès que le CLLocationManager est libéré, la boîte de dialogue disparaît immédiatement.

Vous devez enregistrer la référence à locationManager par exemple ou variable statique

Pour surmonter ce problème, vous devez modifier le CLLocationManager d'exister sur la classe vs l'instance en cours d'être libéré avec la classe.

Pour plus d'aide sur CLLocationManager voir Apple API Reference

+0

'locationManager' comme une variable d'instance est bien, Le problème semble être que l'instance de' Location' n'est pas retenue nulle part . –

+0

Il devrait avoir une référence à locationManager sur le statique ou l'instance –