2016-04-15 23 views
0

我正在使用CLLocationManager來獲取用戶的當前位置。我需要用戶的當前位置,因爲我正在使用Open Weather API來顯示用戶所在的天氣數據。我的問題是,我第一次打開應用lat和long值是0,0。但是,如果我再次運行應用程序,它工作正常。所以只有在應用程序首次啓動時纔會使用不正確的lat和long值。我盡我全部設立在viewDidLoad中,這裏是代碼...Latidude和經度是不正確的首次啓動應用程序ios

locationManager = [[CLLocationManager alloc] init]; 
[locationManager requestAlwaysAuthorization]; 
locationManager.delegate = self; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

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

[locationManager startUpdatingLocation]; 

我不知道我做錯了。是否在視圖控制器而不是App Delegate中獲得lat和long?

這裏是我如何獲取位置值:

locationManager.location.coordinate.latitude 
locationManager.location.coordinate.longitude 
+0

該代碼不顯示如何獲取和處理位置值。我建議你也分享一下。另外,它是模擬器還是真實設備? –

+0

好吧現在就發佈這個代碼。我正在使用一個實際的設備。儘管在模擬器和設備上都會發生此錯誤。 –

+0

你是說這兩行跟在同一塊/方法內的前面的代碼行? –

回答

1

它的發生,因爲當您啓動應用程序第一次位置經理請求用戶允許訪問當前的位置,當用戶允許 - 這需要一點時間獲取當前位置的過程完成之前,你所訪問的座標該過程。

當您再次啓動您的應用程序時位置管理器檢測到您已授予該權限,因此它可以非常快速地爲您提供當前位置座標。

所以解決方案是 - 你必須等到它完成位置更新選擇。你可以把一些還挺有延遲使用調度或可以使用位置經理的委託方法didUpdateUserLocation或者您的UIViewController不是初始視圖控制器 - 在這種情況下,你應該實現的AppDelegate這個過程中,didFinishLaunching使用您的代碼,所以當你打開你的視圖控制器(無論您使用的導航流程)位置的細節將在那裏因爲在此期間位置管理器將跟蹤您的位置。

希望它能幫助你!

+0

謝謝你爲我工作。我所做的是在NSUserDefaults中,我檢查了這是用戶第一次啓動應用程序,如果是這樣,我將布爾值設置爲true。然後在視圖控制器中,我檢查了布爾值的值,如果它是真的,我使用派遣來5秒後執行http請求。 –

0

您應該檢查CLLocation對象爲負值的horizontalAccuracy,如果是這樣的話不使用經/緯度值。很有可能當你看到緯度/經度值是0/0時,GPS沒有確保位置鎖定。

+0

水平精度爲65.我該怎麼辦?我應該添加一個完成處理程序,並且只有在緯度和長度被檢索時才顯示天氣? –

+0

您應該檢查天氣服務的粒度,並將其與GPS的水平精度進行比較。 – adib

相關問題