gpt4 book ai didi

ios - 在应用程序启动时在 iOS 模拟器中获取用户坐标

转载 作者:行者123 更新时间:2023-11-29 02:09:13 25 4
gpt4 key购买 nike


有人要求我用 Objective C 为 iOS 编写一个小应用程序,该应用程序应该在一组坐标中选择离用户最近的对象
计划是在应用程序首次加载时仅加载一次用户坐标。
这是我当前的代码:

(void)viewDidLoad {
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.headingFilter = 1;
self.locationManager.delegate = self;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
[self.locationManager startUpdatingLocation];

self.userLat = self.locationManager.location.coordinate.latitude;
self.userLon = self.locationManager.location.coordinate.longitude;
NSLog(@" ----------------------------- ");
NSLog(@"User lat : %lf", self.userLat);
NSLog(@"User lon : %lf", self.userLon);
NSLog(@" ----------------------------- ");
}

我没有 Apple iOS 开发者程序,所以我只能使用 xCode 的 iOS 模拟器。我尝试通过调试在 iOS 模拟器中设置一些自定义坐标,如下所示:

当我执行应用程序时(显然是在设置坐标之后),日志中的 userLat 和 userLon 为 0.00..

Apr  6 03:16:20 Locals-Mac.local app[5683]:  ----------------------------- 
Apr 6 03:16:20 Locals-Mac.local app[5683]: User lat : 0.000000
Apr 6 03:16:20 Locals-Mac.local app[5683]: User lon : 0.000000
Apr 6 03:16:20 Locals-Mac.local app[5683]: -----------------------------

我记得在某处听说 iOS 模拟器不能与 CoreLocation 库一起工作(这可能是对的,也可能是错的,我不知道)。
这是纬度/经度值为 0 的原因吗?
如果原因确实是 iOS 模拟器,此代码是否为用户提供当前位置?

提前致谢!

编辑:

有了答案和评论,我现在正在使用 didUpdateLocations 回调函数:

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *location = [locations lastObject];
self.userLat = location.coordinate.latitude;
self.userLon = location.coordinate.longitude;

NSLog(@" ----------------------------- ");
NSLog(@"User lat : %lf", self.userLat);
NSLog(@"User lon : %lf", self.userLon);
NSLog(@" ----------------------------- ");
}

我要求 xCode 使用以下 Scheme 选项模拟我到伦敦的位置:

我的新加载函数:

-(void)viewDidLoad {
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.headingFilter = 1;
self.locationManager.delegate = self;

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
[self.locationManager requestWhenInUseAuthorization];

self.locationManager.distanceFilter = kCLDistanceFilterNone;
[self.locationManager startUpdatingLocation];
}

这段代码仍然没有打印放置在位置回调函数中的 NSLog。我错过了什么吗?

最佳答案

当您开始更新时,位置管理器不会立即获得用户的位置。如果您在调用 startUpdatingLocation 后立即检查 location 属性,它通常为 nil 除非其他应用最近更新了它。您需要实现 locationManager:didUpdateLocations: 委托(delegate)方法,一旦它有一个位置就会被调用。

您还需要检查并可能请求位置权限。

关于ios - 在应用程序启动时在 iOS 模拟器中获取用户坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29464192/

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