当前位置: 首页 > 知识库问答 >
问题:

iOS 8地图工具包Obj-C无法获取用户位置

左康安
2023-03-14

我在iOS8中使用Obj-C而不是Swift使用地图工具包。我无法获得设备位置,它被设置为0.00,0.00,我得到错误:

Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.
if(IS_OS_8_OR_LATER) {
    [self.locationManager requestWhenInUseAuthorization];
    [self.locationManager requestAlwaysAuthorization];
}
[self.locationManager startUpdatingLocation]; 
NSLocationWhenInUseUsageDescription  :   App would like to use your location.
NSLocationAlwaysUsageDescription  :  App would like to use your location.
//Get Location
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.distanceFilter = kCLDistanceFilterNone;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager startUpdatingLocation];

MKCoordinateRegion region = { { 0.0, 0.0 }, { 0.0, 0.0 } };
region.center.latitude = self.locationManager.location.coordinate.latitude;
region.center.longitude = self.locationManager.location.coordinate.longitude;
region.span.longitudeDelta = 0.005f;
region.span.longitudeDelta = 0.005f;
[mapView setRegion:region animated:YES];

共有1个答案

慕阳平
2023-03-14

我让它起作用了。我在下面发布了我的代码来帮助其他有问题的人。

下面是我在iOS8中使用MapKit映射视图的完整代码。

在appname-info.plist中添加一个新行,其键名为:

NSLocationWhenInUseUsageDescription
NSLocationAlwaysUsageDescription
YourAppName would like to use your location.
#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
#import <MapKit/MapKit.h>
#import <MapKit/MKAnnotation.h>

@interface YourViewController : UIViewController <MKMapViewDelegate,  CLLocationManagerDelegate> {

}


@property(nonatomic, retain) IBOutlet MKMapView *mapView;
@property(nonatomic, retain) CLLocationManager *locationManager;
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.


    mapView.delegate = self;
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    #ifdef __IPHONE_8_0
    if(IS_OS_8_OR_LATER) {
         // Use one or the other, not both. Depending on what you put in info.plist
        [self.locationManager requestWhenInUseAuthorization];
        [self.locationManager requestAlwaysAuthorization];
    }
    #endif
    [self.locationManager startUpdatingLocation];

    mapView.showsUserLocation = YES;
    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:YES];

    self.locationManager.distanceFilter = kCLDistanceFilterNone;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [self.locationManager startUpdatingLocation];
    NSLog(@"%@", [self deviceLocation]);

    //View Area
    MKCoordinateRegion region = { { 0.0, 0.0 }, { 0.0, 0.0 } };
    region.center.latitude = self.locationManager.location.coordinate.latitude;
    region.center.longitude = self.locationManager.location.coordinate.longitude;
    region.span.longitudeDelta = 0.005f;
    region.span.longitudeDelta = 0.005f;
    [mapView setRegion:region animated:YES];

}

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 800, 800);
    [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
}
- (NSString *)deviceLocation {
    return [NSString stringWithFormat:@"latitude: %f longitude: %f", self.locationManager.location.coordinate.latitude, self.locationManager.location.coordinate.longitude];
}
- (NSString *)deviceLat {
    return [NSString stringWithFormat:@"%f", self.locationManager.location.coordinate.latitude];
}
- (NSString *)deviceLon {
    return [NSString stringWithFormat:@"%f", self.locationManager.location.coordinate.longitude];
}
- (NSString *)deviceAlt {
    return [NSString stringWithFormat:@"%f", self.locationManager.location.altitude];
}

享受吧!

--迈克

 类似资料:
  • 本文向大家介绍js+html5获取用户地理位置信息并在Google地图上显示的方法,包括了js+html5获取用户地理位置信息并在Google地图上显示的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js+html5获取用户地理位置信息并在Google地图上显示的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的web程序设计有所帮助。

  • 我正在开发天气应用程序,当应用程序第一次推出时,我想检测用户当前位置,但我尝试使用谷歌地图,但他们要求信用卡,以获得谷歌地图的api密钥,不幸的是,我没有信用卡。你有其他的解决方案或替代方案吗。

  • 我试图给我的界面一个新的功能,但我遇到了一些障碍。当鼠标移动时,我想放大JLabel上的图像。以下是我的JLabels的外观: 代码一直在继续。我想创建一个函数并将其添加到mouseListener中,这样所有的行为都将相同。我想实现这一点: 但是我不知道我可以使用这个,因为java说我需要图像来创建我的放大图像图标 如何从代码中检索用于打包JLabel的图像。任何帮助都将不胜感激。

  • 我有一个页面的正文在滚动。也就是说,body上的滚动事件侦听器起作用。但是,window和document上的滚动侦听器不会激发。 问题是,即使body是滚动的,$(“body”).scrolltop()始终返回0。我循环遍历了body的所有子级,没有一个scrollTop()大于0。有些孩子有溢出:隐藏,但应该不会影响滚动顶部,我猜。 我删除了高度:100%根据这个问题,我也经历了这个问题。 我

  • 问题内容: 我试图在iOS 8的Swift项目中使用iOS版Google Maps。我添加了Objective- C桥接标头,并按照其文档中的说明添加了Google Maps SDK 。我尝试了这个示例,一切正常。 我需要显示我的当前位置。我在iOS8模拟器中为自定义位置设置了坐标,并修改了此答案中所示的代码。下面是它的Swift版本。 我运行了它,但是它没有指向我分配的位置。当我离开该位置时,它

  • 结果在性能较慢的情况下,有一种更快的方法来获得位图。使用NDK是否更好? 查找实际示例