簡體   English   中英

在應用啟動時在iOS模擬器中獲取用戶坐標

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM