2016-12-03 13 views
5

Đây là mã của tôi để thực hiện google bản đồ và CLLocationManager:didChangeAuthorizationStatus không được gọi sau khi nhấp Allow

class MapViewController: UIViewController { 
    @IBOutlet weak var MapView: GMSMapView! 
    var locationmanager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     locationmanager.delegate = self 
     locationmanager.requestWhenInUseAuthorization() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 
} 
extension MapViewController: CLLocationManagerDelegate { 
    private func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
    print("didChangeAuthorizationStatus") 
    if status == .authorizedWhenInUse { 
      locationmanager.startUpdatingLocation() 
      MapView.isMyLocationEnabled = true 
      MapView.settings.myLocationButton = true 
     } 
    } 

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     print("didUpdateLocations") 
     if let location = locations.first { 
      MapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0) 
      locationmanager.stopUpdatingLocation() 
     } 
    } 
} 

sau khi nhấp vào Cho phép hoặc không cho phép didChangeAuthorizationStatus không bao giờ gọi

+1

Không thực sự thành thạo trong Swift (tôi nhiều hơn một chàng trai Objective-C), nhưng không phải là 'private' vòng loại rất thiếu khôn ngoan ở đây? – jcaron

+0

@jcaron Tuyệt đối. Các phương thức riêng không được tiếp xúc với Objective-C và do đó không phải là Core Location. Đó là một phương pháp tùy chọn để trình biên dịch sẽ không phàn nàn (mặc dù nó nên IMO). –

+0

@Amir_P Xong. Thanks =) – Elena

Trả lời

7

Nếu bạn đang ở trên Swift 3 toàn bộ chữ ký của phương pháp này là không chính xác.

Đây là những gì bạn cần:

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 
    //your code 
} 
+1

những điều này nên được phát hiện bởi trình biên dịch nếu nó được khai báo bên trong một phần mở rộng – jarryd

+0

@Jarryd không may trình biên dịch Xcode không hoàn hảo. Mọi thứ có thể đã thay đổi kể từ khi câu hỏi này được đăng (nửa năm trước) – Elena

+0

Tôi đã triển khai trình quản lý vị trí vào ngày khác và trình biên dịch phàn nàn về việc đánh dấu chức năng riêng tư trong tiện ích. Chức năng này sẽ chỉ được gọi một lần vì một lý do nào đó. Dù sao, điều này cố định nó, cảm ơn! – jarryd

Các vấn đề liên quan