2014-10-10 101 views
0

當我試圖在地圖上顯示用戶位置時,它顯示位置在海洋中的某個位置(lat = 0.000,lon = 0.000),我已將模擬位置設置爲倫敦仍然沒有。iOS應用程序獲取無效的用戶位置

當我嘗試在iphone上編譯應用程序時,它並沒有要求獲取用戶當前位置的權限,只是當我在iphone設置中啓用位置服務應用程序時,該應用程序顯示用戶當前位置。

任何想法爲什麼它這樣做? 這是我的viewDidLoad:

_locationManager = [[CLLocationManager alloc] init]; 
_locationManager.delegate = self; 
_locationManager = [[CLLocationManager alloc] init]; 
if(IS_OS_8_OR_LATER) { 
    [_locationManager requestWhenInUseAuthorization]; 
    [_locationManager requestAlwaysAuthorization]; 
} 
_locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move 
_locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
[_locationManager startUpdatingLocation]; 
+0

你iPhone在運行iOS 7還是8? – Undo 2014-10-10 14:52:35

+0

添加'NSLocationWhenInUseUsageDescription'鍵到你的info.Plist文件 – 2014-10-10 14:54:06

+0

我在我的iphone上運行7和模擬器上運行8,我已經添加了描述,任何其他想法? – 2014-10-10 23:41:35

回答

0

沒有必要增加這兩個他們都做不同的事情

[_locationManager requestWhenInUseAuthorization]; 
[_locationManager requestAlwaysAuthorization]; 

requestWhenInUseAuthorization

使用[_locationManager requestWhenInUseAuthorization];當你想獲得位置更新時,應用程序是前景模式的活動,而不是在後臺。

requestAlwaysAuthorization

使用[_locationManager requestAlwaysAuthorization];當你想獲得位置更新,甚至當你的應用程序在後臺模式。因此,OS會要求相應的權限

添加要點的Info.plist

現在是mandetory添加任何NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription關鍵是你的info.plist取決於其許可你所要求的。

這個鍵的值應該是爲什麼應用程序要使用定位服務有點像NSString解釋的用戶「我們需要你爲XYZ原因的位置」

如果iOS不上面找到你的plist文件的關鍵,它會忽略位置請求。 希望這有助於。順便說一下,我收錄了你觀看WWDC 2014視頻「核心位置新增功能」,所有iOS8更改都已得到很好的解釋。

在代碼中的其他變化

另外一件事我在你的代碼中看到,您正在創建的第3行_locationManager新實例,意味着你要的LocationManager分配委託後,創建新的對象,不應該這樣做那個也是。

+0

先謝謝你的回答!但我已經看到更改爲ios 8時需要做的更改,但我沒有說我已更改爲ios 8,該應用程序未在ios 7或8上顯示用戶位置,並且我添加了說明。所以仍然,任何想法爲什麼它不要求位置許可? – 2014-10-10 23:35:53

+0

可能是,您在分配委託給它之後再次創建新的locationManager對象,因此可能導致該問題。 – 2014-10-11 04:58:48

+0

在刪除新的位置管理器後,它會詢問我(位於設備中)是否具有位置權限,但是當我點擊確定時,它什麼都不做,我需要返回設置。在模擬器中它的同樣的問題 – 2014-10-11 12:47:34