【问题标题】:Get user Coordinates in iOS simulator at the app launch在应用启动时在 iOS 模拟器中获取用户坐标
【发布时间】:2015-04-06 10:50:25
【问题描述】:


我被要求在 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 模拟器,那么这段代码是否提供了用户当前位置?

提前致谢!

编辑:

有了答案和 cmets,我现在正在使用 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。我错过了什么吗?

【问题讨论】:

  • 您可以尝试使用带坐标的gpx,并根据项目方案上的g​​px设置您的应用程序来模拟其位置。
  • 我确实更新了我的第一个帖子,但即使我要求我的项目模拟一个职位,我似乎仍然无法获得我的位置,你能检查我的更新吗?谢谢

标签: ios objective-c cllocationmanager


【解决方案1】:

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

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

【讨论】:

  • didUpdateLocations 会不断更新位置,对吧?有没有办法只获取一次信息?
  • 您可以在获得第一次位置更新后致电stopUpdatingLocation
猜你喜欢
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2012-04-14
  • 2011-09-24
  • 2018-03-07
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多