2015-09-12 23 views
25

Mã bên dưới sẽ nhận được vị trí hiện tại. Nhưng lỗi trên được tạo ra. Hàm didUpdateLocations không bao giờ được gọi.Miền lỗi IOS 9 = kCLErrorDomain Code = 0 "(null)"

Chạy ứng dụng này trên thiết bị (iPhone 5s) iOS 9.1. Info.plist có các khả năng và quyền riêng tư của thiết bị - Mô tả sử dụng vị trí được cấu hình như được hiển thị trong hình ảnh đính kèm. Hãy giúp tôi!

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

Bạn có tìm thấy giải pháp nào cho số này –

+0

Hi @ user1848653: Bạn có thể đánh dấu câu trả lời của mình là được chấp nhận không? Tôi khá thường xuyên nhận được +1 và nó sẽ cung cấp cho nó khả năng hiển thị nhiều hơn để giúp các nhà phát triển với lỗi này. – H4Hugo

+0

Vui lòng kiểm tra trên thiết bị thực. Tôi cũng phải đối mặt với cùng một vấn đề nhưng nó đang làm việc trên thiết bị thực. – Chandni

Trả lời

34

Vui lòng thử này:

Go to:

  • sản phẩm -> Scheme -> Edit Scheme -> Options -> Cho phép Location mô phỏng phải được kiểm tra và hãy thử cung cấp vị trí mặc định, không đặt nó thành "none"

EDIT: Như đã đề cập trong các nhận xét, cũng khởi động lại Xcode và bạn đã hoàn tất!

Hy vọng điều này sẽ hữu ích.

+1

Tôi có thể xác nhận tác phẩm này. Tôi đã có cùng một vấn đề chính xác như được đề cập trong câu hỏi ban đầu và trong khi "Cho phép mô phỏng vị trí" được chọn, tôi đã đặt vị trí mặc định thành không có gì. Thay đổi điều này thành một vị trí mặc định và sau đó khởi động lại Xcode đã giải quyết được vấn đề. – tmarkiewicz

+5

Điều này cũng hiệu quả đối với tôi * sau * Tôi đã khởi động lại Xcode. – user212514

+0

@ user212514 Tôi phải đối mặt với lỗi này một lần nữa trên một dự án khác, sử dụng phương pháp tôi đã cung cấp để sửa chữa nó và không phải khởi động lại Xcode. Bạn có thể xác nhận bạn đã có thông báo lỗi tương tự được hiển thị không? – H4Hugo

4

Nếu cảnh báo ủy quyền vị trí không bật lên cho bạn, hãy thử thêm NSLocationAlwaysUsageDescription vào plist của bạn dưới dạng chuỗi loại. Ngoài ra, làm tương tự cho NSLocationWhenInUseUsageDescription.

1

Tôi gặp sự cố tương tự với ứng dụng mà tôi đang di chuyển từ 8.0 -> 9.0/9.1. Tôi đã thử một vài thứ như viết phần CLLocationManager chỉ trong Swift và một dự án Obj-C mới. Tôi cũng đã thử nghiệm nó trên các thiết bị khác nhau. Để giải quyết vấn đề trên thiết bị, tôi đã gỡ bỏ hàm didFailWithError. Điều này dừng hoàn toàn lỗi. Điều này có vẻ không phải là ý tưởng hay nhất nhưng trong IOS9 bạn có thể giới hạn ứng dụng của mình với các thiết bị có GPS hoặc Location-Services. Android đã làm điều này trong một thời gian rất dài. Tôi cũng nhận thấy trong .plist của bạn không có quyền được kích hoạt cho NSLocationALwaysUsageDescription hoặc các thuộc tính NSLocationWhenInUseUsageDescrtiption bao gồm.

Chỉ để tham khảo, tôi đã đính kèm nội dung .plist hiện tại của tôi trông giống như không kích hoạt lỗi này cũng như đoạn mã trong tệp điều khiển obj-c. Mã này bắt đầu ở phần cuối của một hàm trước đó và sau đó có nhận xét về delegate didFailWithError và didUpdateLocations. Hiện nay đang làm việc thành công trong 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

tìm kiếm google đúng câu trả lời này có vẻ là một vấn đề vì iOS4.0.

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

trong Chạy => Tùy chọn => Vị trí chính/vô hiệu Cho phép mô phỏng vị trí.

trong Trình mô phỏng IOS của bạn trong Gỡ lỗi => Vị trí chọn vị trí. Điều này đã khắc phục vấn đề cho tôi.

0

tôi có những gợi ý cho người sử dụng bản đồ táo trong ứng dụng của họ

  1. Đừng tiếp trên kết quả mô phỏng, bởi vì luôn luôn nó sẽ không cho kết quả chính xác.
  2. Đối với tất cả các bản kiểm tra gỡ lỗi và thực thi liên quan đến bản đồ trên các thiết bị thực.
  3. Như trong xcode 8 (với kiến ​​thức của tôi), bạn chỉ có thể kết nối thiết bị iOS của mình với hệ thống và chạy ứng dụng trực tiếp.
  4. Ngay cả đối với vấn đề trên, giải pháp là như nhau, chỉ cần thử với các thiết bị thực sự vấn đề của bạn sẽ được giải quyết.
Các vấn đề liên quan