[英]Get user Coordinates in iOS simulator at the app launch
我被要求在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
之后startUpdatingLocation
檢查location
屬性,那么除非最近有其他應用對其進行了更新,否則通常為nil
。 您需要實現locationManager:didUpdateLocations:
委托方法,該方法一旦具有位置就會被調用。
您還需要檢查並可能要求位置許可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.