2009-09-19 88 views
8

我試圖獲取用戶當前的經緯度與此viewDidLoad方法。由此產生的地圖正確指出了當前的位置,但NSLog一貫顯示:iPhone當前用戶位置座標顯示爲(0,0)

2009-09-19 16:45:29.765 Mapper[671:207] user latitude = 0.000000 
2009-09-19 16:45:29.772 Mapper[671:207] user longitude = 0.000000 

任何人都知道我在這裏失蹤?在此先感謝您的幫助!

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [mapView setMapType:MKMapTypeStandard]; 
    [mapView setZoomEnabled:YES]; 
    [mapView setScrollEnabled:YES]; 
    [mapView setShowsUserLocation:YES]; 

    CLLocation *userLoc = mapView.userLocation.location; 
    CLLocationCoordinate2D userCoordinate = userLoc.coordinate; 

    NSLog(@"user latitude = %f",userCoordinate.latitude); 
    NSLog(@"user longitude = %f",userCoordinate.longitude); 
} 

回答

9

據我所知,地圖不會嘗試獲取用戶位置,直到它實際顯示爲止。一個很好的測試就是,你什麼時候得到對話框詢問你是否可以讓應用程序獲取用戶位置?根據我的經驗,只有在地圖顯示在屏幕上之後纔會出現。

解決這個問題,如果你必須在啓動時的位置,最好的辦法,是落實經典的核心位置處理程序代碼,並開始從那個位置。您可以停止接收從那裏更新一次地圖啓動並從那裏得到進一步的修改(但如果你需要不斷地更新你最好只是用標準核心位置的更新是一致的。如果你想想看,當你有「顯示用戶位置「在地圖中啓用進一步使用核心位置由您的應用程序本質上是免費的,因爲無論如何,GPS將被激活全部時間

2

從上CLLocation文檔,如果水平精度或垂直精度是否定的,這意味着它不能找到的值。我懷疑這是發生在這裏的事情。請記住,如果你只看一次,它可能會給你一個近似的最後一個已知的位置,然後再提高準確性結果。

平面精度 座標的緯度和經度 識別 圓的中心,該值指示該圓的半徑 。負 值表示座標的 緯度和經度無效。

+0

,那麼什麼是獲取當前位置的座標的方式之後執行seletor? – ennuikiller 2009-09-19 22:12:32

+0

如果您只想查找當前位置,則完全不需要使用Maps API。您可以直接查詢核心位置。 http://developer.apple.com/mac/library/documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html – AlBlue 2009-09-20 09:34:44

1

您應該從CoreLocation而不是MapKit座標MapView將顯示用戶的位置在確定位置之前,經緯度都設置爲0. 3

您應該創建一個CLLocationManager實例,設置委託,當位置確定後會通知您。

4

如果你試圖讓用戶座標在viewDidLoad中()方法,它總會給0,0的結果,因爲它尚未初始化。

你應該看看「我在哪裏」的示例代碼形式蘋果網站。它解釋你需要什麼。 您需要使用CLLocationManager類。您還需要方法

*-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation* 

每次更新用戶位置時,都會自動調用此方法。如果你使用模擬器,那麼這個方法只會被調用一次,它會返回一些默認的座標。

希望它有幫助。

-1

添加到您的viewDidLoad部分

mapView.showsUserLocation = YES; 
+1

這是無關緊要的。 – Hammer 2014-10-30 06:20:27

1

正如Kendall說,該的MKMapView沒有用戶位置,直到完成加載,並且viewDidLoad方法通常要求它太早。比使用CoreLocation更簡單的方法是實現MKMapViewDelegate方法 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation。它會在你找到用戶的位置時立即給你,而不必處理CLLocationManager。

+0

這一個看起來像最簡單和測試好。 – Hammer 2014-10-30 06:46:27

0

CLLocation *userLoc = mapView.userLocation.location; 
CLLocationCoordinate2D userCoordinate = userLoc.coordinate; 

NSLog(@"user latitude = %f",userCoordinate.latitude); 
NSLog(@"user longitude = %f",userCoordinate.longitude); 

ViewdidAppear試試這個:或致電延遲