2014-06-08 28 views
7

Tôi đang cố gắng sử dụng MapKit trên iOS 8 và tôi tiếp tục nhận được lỗi:MapKit trong iOS 8 và Swift

Trying to start MapKit location updates without prompting for location authorization. Must call 
-[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager 
requestAlwaysAuthorization] first. 

Nhìn nó lên đây, tôi thấy rằng tôi đã phải thực hiện NSLocationWhenInUsageDescription trong plist của tôi và cũng thực hiện cuộc gọi đến locationManager.requestWhenInUseAuthorization() nhưng không có gì xảy ra và tôi vẫn gặp lỗi đó trong bảng điều khiển. Tôi đang làm gì sai?

+1

'NSLocationWhenInUsageDescription' là khóa sai. Sử dụng 'NSLocationWhenInUseUsageDescription'. – Klaas

Trả lời

10

Trong đại biểu ứng dụng của tôi, tôi đã thực hiện một var tùy chọn cho locationManager bên ngoài lớp và sau đó thiết lập

locManager = CLLocationManager() 
locManager!.requestWhenInUseAuthorization() 

Điều này làm cho cái nhìn tỉnh táo để bật lên với NSLocationWhenInUseUsageDescription hoặc NSLocationAlwaysUsageDescription của bạn nếu bạn thay đổi nó một cách thích hợp.

Sau đó, trong tệp bộ điều khiển chế độ xem, tôi đã tạo một var khác bên ngoài lớp để giữ một CLLocationManager cục bộ. sau đó tôi đặt

if locManager { 
     locMan = locManager! 
     locMan!.delegate = self 
    } 

Sau đó, bạn có thể sử dụng phương pháp đại biểu

func locationManager(_manager: CLLocationManager!,didChangeAuthorizationStatus status: CLAuthorizationStatus) 

mà được gọi khi tình trạng thay đổi quyền truy cập, mà nó khi người dùng phản ứng với các cửa sổ pop up. Bên trong này, bạn có thể sử dụng bit này để đặt vị trí của người dùng trên bản đồ

if status == CLAuthorizationStatus.AuthorizedWhenInUse { 
     map.showsUserLocation = true 
    } 

sẽ chỉ thêm vị trí người dùng vào bản đồ khi bạn được phép sử dụng.

+0

Điều đó đã loại bỏ lỗi nhưng nó vẫn không yêu cầu quyền hoặc hiển thị vị trí của người dùng. – Phil

+0

Tôi nghĩ rằng nó chỉ nhắc bạn lần đầu tiên bạn mở ứng dụng để bạn phải xóa khỏi trình mô phỏng hoặc thiết bị hoặc đi vào cài đặt và cho phép vị trí –

+0

Điều đó không hoạt động và ứng dụng thậm chí không hiển thị trong vị trí cài đặt. – Phil

9

Tôi cũng đã bị làm phiền bởi điều đó, cho đến khi tôi nhận ra rằng phím info.plist đã thay đổi. Nếu bạn có NSLocationUsageDescription, bạn sẽ cần phải thay đổi thành NSLocationAlwaysUsageDescription hoặc NSLocationWhenInUseUsageDescription (đặt ít nhất một thành YES), bây giờ là bắt buộc trong iOS8.

Và sau đó, mã của Robert hoạt động, vì nó nên (nhờ chia sẻ).

+1

Chỉ cần lưu ý: Các phím này KHÔNG CÓ/KHÔNG. Bạn phải đặt văn bản cho một lý do mà người dùng sẽ thấy giải thích lý do tại sao bạn cần vị trí (ví dụ: "Ứng dụng tìm các địa điểm yêu thích gần bạn"). Vì vậy, đặt "CÓ" hoạt động nhưng như vậy sẽ "KHÔNG" hoặc "42" miễn là một số giá trị được đặt cho khóa. – Anna

7

Đó là NSLocationWhenInUseUsageDescription, không phải NSLocationWhenInUsageDescription. Hầu hết các địa điểm trực tuyến có khóa sai

+1

Cảm ơn Chúa! Đã dành một ngày cố gắng để tìm ra lý do tại sao không có gì hoạt động và thực sự có vẻ như nhiều bài viết đã sai. cảm ơn!! – TommyG

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