iOS 8 Mapkit Objc 无法获取用户位置

2023-12-03

我正在 iOS 8 中使用 Obj-C 而不是 SWIFT 来使用 Map Kit。我无法获取设备位置,它设置为 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]; 

并在 info.plist 中

NSLocationWhenInUseUsageDescription  :   App would like to use your location.
NSLocationAlwaysUsageDescription  :  App would like to use your location.

我确实收到提示允许该应用程序使用我的位置,但在我同意后没有任何变化。该位置显示为 0.00、0.00。

显示用户位置的代码:

//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];

Mike.

**编辑:查看下面的答案。


我成功了。我在下面发布了我的代码来帮助其他遇到问题的人。

这是我在 iOS 8 中使用 MapKit 地图视图的完整代码。

In your AppName-Info.plist 添加一个新行,其键名称为:

NSLocationWhenInUseUsageDescription

Or

NSLocationAlwaysUsageDescription

该值是您要显示的消息的字符串:

YourAppName would like to use your location.

在你的头文件中。 (我用App Name-Prefix.pch 但 YourViewController.h 也可以工作)

#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)

你的ViewController.h

#import <MapKit/MapKit.h>
#import <MapKit/MKAnnotation.h>

@interface YourViewController : UIViewController <MKMapViewDelegate,  CLLocationManagerDelegate> {

}


@property(nonatomic, retain) IBOutlet MKMapView *mapView;
@property(nonatomic, retain) CLLocationManager *locationManager;

YourViewController.m

- (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];
}

Enjoy!

--Mike

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 8 Mapkit Objc 无法获取用户位置 的相关文章

  • 如何从整数生成 unicode 字符?

    我想创建一个 Unicode 字符数组 但我不知道如何将整数转换为 Unicode 表示形式 这是我到目前为止的代码 NSMutableArray uniArray NSMutableArray alloc initWithCapacity
  • 您可以将 Apple 的 Mapkit 用于混合应用程序吗?

    此 Web 应用程序适用于 Web 和 Android 我研究了谷歌等其他公司 但他们也有局限性 如果您可以使用它 任何人都可以向我指出它的文档 Thanks 2019年更新 Apple 现在拥有用于在网络上使用 Apple 地图的第一方
  • Objective C iPhone 何时将对象引用设置为 nil

    我使用 Objective C 和 Cocoa 框架进行开发已经有一段时间了 然而 我仍然不太清楚 我什么时候应该将对象引用设置为 nil 我知道建议在释放具有委托的对象之前执行此操作 并且您还应该在保留子视图的 viewDidUnload
  • UIView 的变换看起来很糟糕

    我有一个简单的视图和简单的背景 我需要旋转视图及其内容 代码在这里 CGAffineTransform r CGAffineTransformMakeRotation 5 M PI 180 0f backView transform r 我
  • ios - navigationItem.titleView 更新时闪烁

    我有一个UIView 拿着一个UIButton 设置为我的navigationItem titleView 当我更新此按钮的文本时 它会短暂闪烁 消失并随新文本重新出现 无论如何 当它改变时 是否可以保持它可见 那么 如果我更改 2015
  • 如何隐藏标签栏并在屏幕上显示完整的表格视图?

    在我的应用程序的实现中 我有一个带有 5 个不同选项卡的选项卡栏控制器 通过以下代码隐藏标签栏后 void hideTabBar for UIView view in self tabController view subviews if
  • 函数“FBSDK_NOT_DESIGNATED_INITIALIZER”的隐式声明在 C99 中无效预期“)”

    我正在使用适用于 iOS 4 6 0 的 Facebook SDK 今天将 cocoapods 更新到 0 38 2 后遇到了上述错误 我不确定这个错误与 cocoapods 有什么关系 Error screenshot 我遇到过同样的问题
  • 从 iPhone 上的 NSString 中删除 HTML 标签

    有几种不同的方法可以删除HTML tags从一个NSString in Cocoa One way http cocoa karelia com Foundation Categories NSString Flatten a string
  • object_setClass()而不是分配isa指针的性能

    我注意到在 XCode 4 6 的最新更新中 我收到了关于以下几行的警告JSONKit m 具体来说 设置对象类的行 dictionary gt isa JKDictionaryClass 这些被标记为已弃用 并注明首选方法是使用objec
  • SplitViewController 与 TabbarController

    我在我的应用程序中使用分割视图功能 我必须将选项卡栏放在 rootViewController 中 但是 当我在选项卡栏中添加控制器并将它们添加到分割视图中时 它不会分割 它只显示detailViewController 这是应用程序中完成
  • 由于无法确认开发者身份而无法打开

    我在 Mac OSX 中开发了一个应用程序和守护进程 并且我已经在 xcode 中与开发者 ID 签署了应用程序和守护进程源代码 在守护进程中 我已经对每个框架进行了签名并打包 并且我使用软件包安装程序对所有框架进行了 pkg 现在我的应用
  • 如何阻止我的应用程序设置“隔离”位?

    从 OS X 10 7 3 开始 我的文本编辑器就在它接触的任何文件上设置 隔离 位 我的文本编辑器设计用于处理 shell 脚本 如果设置了隔离位 则无法从命令行执行 shell 脚本 直到您在 Finder 中双击它并浏览 此应用程序是
  • 从 NSString 的第一行删除换行符

    我怎样才能删除第一个 nNSString 中的字符 编辑 只是为了澄清一下 我想做的是 如果字符串的第一行包含 n 字符 请将其删除 否则不执行任何操作 即 如果字符串是这样的 nhello this is the first line n
  • UIAlertView 中的 MPVolumeView?

    是否可以将 MPVolumeView 放入 UIAlertView 中 我已经尝试过put它在里面 但不显示 这可能是sizeToFit or initWithFrame 部分 有没有办法测试是否MPVolumeView实际上正在被创建吗
  • 无限 UIScrollView 在 iOS4.3 中出现奇怪的行为,而不是 iOS5

    我已经实现了一个包含 UIView 的无限 UIScrollView 在 iOS5 模拟器和 iPhone 中滚动时 效果非常好 但在 iOS 4 3 sim 和手机 中 情况有点疯狂 滚动条传递的视图比应有的多 大约比 iOS5 多 10
  • Apple 推送通知徽章编号

    我开发了服务器端应用程序 以在收到新通知后将徽章编号维护为递增或递减 并在看到通知后删除它工作正常 但是显示徽章时存在一些问题 实际情况是 在设备上收到新通知后 我单击取消按钮 然后徽章编号正确显示 但之后我将打开应用程序并关闭应用程序徽章
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 处理核心数据中的重复条目

    我有一个允许用户保存收藏夹的应用程序 我正在使用 Core Data 将收藏夹存储为托管对象 我已经编写了一些代码来防止存储重复项的可能性 但我想知道是否有更好的方法来做到这一点 每个收藏夹对象都有一个唯一的 ID 字段 在下面的代码中 我
  • UICollectionviewcell 更改背景

    如果我知道部分编号和项目编号 如何更改单元格中的背景 下面的代码显示了我如何尝试做到这一点 UICollectionViewCell collectionView UICollectionView collectionView cellFo
  • extern NSString *const 在类中。

    你好 我有这个头文件 import

随机推荐

  • 在 php 中运行多个查询

    我对 PHP 和 HTML 真的很陌生 按提交按钮后 我尝试使用 Users MySQL 表中已有的数据填充字段 这有效 我还想将通过 SELECT 获得的相同数据插入到另一个名为 scan 的 SQL 表中
  • 为什么 HTML 中 标签没有关闭?

    出于好奇 为什么 img gt 标签未关闭于HTML img src smiley gif alt Smiley face height 42 width 42 我还注意到 img gt 标签明确地封闭在XHTML img src smil
  • 如何正确解析算术表达式中的数字,区分正数和负数?

    我在数据结构类中有一个作业 其中我必须编写一个计算器 用 4 个基本运算和括号来求解算术表达式 输入是通过 stdin 缓冲区完成的 输出也是如此 一开始很简单 老师给我们提供了算法 如何将表达式从中缀转换为后缀以及如何对其求值 唯一的目标
  • 如何在 J.T.Sage DateBox 中禁用已选择的下一个日期框的日期

    我的应用程序使用 jt sage DateBox 我想禁用已选择的下一个日期框字段的日期选择器例如 我的 Date1 就像 2014 年 8 月 13 日 我的其他日期框字段需要在 2014 年 8 月 13 日之后选择 注意 取决于之前的
  • 使用 BeautifulSoup 查找包含特定文本的 HTML 标签

    我正在尝试获取 HTML 文档中包含以下文本模式的元素 S 11 h2 this is cool 12345678901 h2 因此 前面的内容将通过使用以下方式进行匹配 soup h2 text re compile r S 11 结果会
  • Dictionary.cs 中的 FindEntry 函数

    我一直在研究 NET 字典的实现 因为我想了解是什么使字典 ContainsKey 和查找速度更快 http referencesource microsoft com mscorlib system collections generic
  • 添加新的 MDI 子窗口时如何避免屏幕弹跳

    在我的 MDI 框架中 我正在创建 MDI 子窗口 如下所示 Form frm new frmMyChild frm MdiParent this frm WindowState FormWindowState Maximized frm
  • 用于渲染丰富网页内容的移动设备检测

    迄今为止最具网络功能的手机是什么 型号和 或用户代理 以及 当试图确定它们是否能够处理丰富的移动定制网站时 应该评估哪些规则 我正在开发一个移动网站 目前正在进行一些用户代理检测 以确定移动设备是否应该看到完全增强的 js jquery m
  • 屏幕上鼠标位置周围区域的缩放框[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有关您编写的代码的问题必须描述具体问题 and 包含有效代码重现它 在问题本身中 看SSCCE org以获得指导 询问代码的问题必须对所解决的问题表现出最低限度的了解 包括尝试的解决
  • Python:旧式(或经典)和新式对象的方法解析顺序

    我读过很多关于 Python 文档中的对象的内容 它们在某些方面区分了这两者 例如 旧式实例与其类无关 是使用称为实例的单个内置类型来实现的 新样式类既不大于也不小于用户定义的类型 有人可以向我解释更多吗 旧式 或经典 和新式 我不明白这句
  • 手工查询与 findDependentRowset

    我已经用 Zend 构建了一个相当大的应用程序 我想知道哪个更好 手动构建查询 使用 Zend 对象模型 db gt select gt form table gt join table2 table id table2 table id
  • php中的时区转换

    谁能建议一种简单的方法来将 php 中的日期和时间转换为不同的时区 您可以为此使用 datetime 对象或其函数别名 例子 摘自 PHP 手册 date default timezone set Europe London datetim
  • 如何在迭代容器时修改容器? [复制]

    这个问题在这里已经有答案了 我指的是容器本身 而不是容器的内容 我想插入 删除 追加等 我对我的问题进行了抽象如下 fn f let mut numbers vec 10 11 12 14 15 for index in 0 numbers
  • 当垃圾收集器消除该对象时,该对象去了哪里?

    假设垃圾收集器已识别出一个类 对象 的实例 Java 程序未使用该实例 因此 垃圾收集器决定消除该对象 因为它没有在代码中的任何地方使用 现在 当一个对象被消除时 该对象在内存中去了哪里 内存中的该对象实际上发生了什么 一般来说 当物体被消
  • 仅使用注释使用 Spring AOP 拦截方法

    在我的 Spring 上下文文件中 我有这样的内容
  • 我们可以使用 jquery 更改 html 或 body 高度吗?

    我正在尝试运行这个语句 body height 100 但当我再次检查高度时 我发现它没有变化 有没有办法改变高度 文档正文是一个神奇的元素 其行为方式与其他 HTML 元素不同 你的代码 body height 100 是正确的 它与以下
  • 扭曲过程中的用户交互

    我正在运行一个扭曲的进程 需要与用户交互 而不阻塞 这个想法是 将要求用户输入一些数据 一旦输入完整的行 程序将对其进行处理 最终触发事件 在用户输入数据期间 反应器必须保持正常运行 扭曲中有对此的支持吗 您可以使用从标准输入读取扭曲互联网
  • 在汇总的 SSRS 组中包含一次值

    我有一个数据源 用于提取活动出席信息 如下表所示 请注意 一次预订可能包含多名与会者 从而导致重复Amount column Date Booking Booking Price Attendee 01 01 2011 Booking 1
  • 按组合并另一个数据框中的最近日期和相关变量

    我有两个数据框 每个数据框每个 ID 有多行 我需要根据第一个数据帧的 ID 和日期从第二个数据帧返回最接近的日期和相关数据 将相关数据添加到第一个数据帧 这也必须与NAs 存在于第二个数据帧中 示例数据 set seed 42 df1 l
  • iOS 8 Mapkit Objc 无法获取用户位置

    我正在 iOS 8 中使用 Obj C 而不是 SWIFT 来使用 Map Kit 我无法获取设备位置 它设置为 0 00 0 00 并且收到错误 Trying to start MapKit location updates withou