gpt4 book ai didi

IOS 8 CLLocationManager 问题(授权无效)

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:27:55 24 4
gpt4 key购买 nike

#import "MyLocationViewController.h"
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);

@interface MyLocationViewController ()

@end

@implementation MyLocationViewController

{
CLLocationManager *locationManager;
}

- (void)requestAlwaysAuthorization
{
[locationManager requestAlwaysAuthorization];
}

- (void)viewDidLoad
{
[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.
self.mapView.showsUserLocation = YES;
self.mapView.delegate = self;
locationManager = [[CLLocationManager alloc] init];

}

- (IBAction)unwindToMap:(UIStoryboardSegue *)segue
{

}

- (IBAction)getCurrentLocation:(id)sender {
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
}

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
MKCoordinateRegion mapRegion;
mapRegion.center = mapView.userLocation.coordinate;
mapRegion.span.latitudeDelta = 0.001;
mapRegion.span.longitudeDelta = 0.001;




CLLocationCoordinate2D location = userLocation.coordinate;
float lat = location.latitude;
float lng = location.longitude;

NSDictionary *locationDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat:lat] , @"Latitude",
[NSNumber numberWithFloat:lng], @"Longitude", nil];

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
locationDictionary, @"Location_A",
nil];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];

NSString *str = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);



if (mapView.userLocation != nil)
{
_longitudeLabel.text = [NSString stringWithFormat:@"%.8f", mapView.userLocation.coordinate.longitude];
_latitudeLabel.text = [NSString stringWithFormat:@"%.8f", mapView.userLocation.coordinate.latitude];
}

[mapView setRegion:mapRegion animated: YES];

}


- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

这是我的代码。

现在,我知道我需要使用 NSLocationAlwaysUsageDescription 键编辑我的 info.plist 文件(我这样做了),并且我为描述添加了一个字符串。

但是,我在执行授权部分时遇到了问题,因为错误仍然是这样的:

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

我已经阅读了 CLLocationManager 的 Apple IOS 8 文档,但不知为何我的代码无法正常工作。

有人可以通过查看我需要修改代码的哪些地方来帮助我消除上述错误消息吗?

谢谢!

最佳答案

在用户授权您的应用使用位置服务之前,您不应打开 MKMapViewshowsUserLocation

您可以实现 CLLocationManagerDelegatelocationManager:didChangeAuthorizationStatus: 方法并打开 showsUserLocation,如下所示:

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {  
if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) {
self.mapView.showsUserLocation = YES;
}
}

关于IOS 8 CLLocationManager 问题(授权无效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com