【发布时间】: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,并根据项目方案上的gpx设置您的应用程序来模拟其位置。
-
我确实更新了我的第一个帖子,但即使我要求我的项目模拟一个职位,我似乎仍然无法获得我的位置,你能检查我的更新吗?谢谢
标签: ios objective-c cllocationmanager