2012-12-04 54 views
0

因此,我正在構建基於位置的遊戲,並且在獲取用戶位置以正確初始化時遇到問題。 它並不總是發生,但有時位置永遠不會從0,0變化。iOS Mapkit - 用戶位置顯示爲0,0

這會導致一個問題,因爲我有一個加載視圖(Vault),阻止地圖顯示直到玩家位置加載,而不是0,0。因此,如果用戶位置沒有設置,保險櫃永遠不會打開顯示地圖。

有沒有其他方法可以確保用戶位置被加載?僅供參考 - 我已經確保他們已啓用位置服務並且他們的設備有能力。 我在自己的設備上開啓和關閉了這個問題,並正確啓用了所有功能。

viewDidLoad中:

/*Location Manager*/ 
locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
[locationManager setDistanceFilter:100.0];//Update location to network when player moves X meters 
[locationManager setDesiredAccuracy:kCLLocationAccuracyKilometer];//Nearest 1000 meters (.33 miles) 
[locationManager startUpdatingLocation]; 

/*Map View*/ 
mapLoaded = false; 
currentFilter = 0; 
[_mapView setDelegate:self]; 
[_mapView setShowsUserLocation:YES]; 
[_mapView setMapType:MKMapTypeSatellite]; 

位置經理代表:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    //Wait until User Location is initialized (NOT 0,0) 
    NSLog(@"Latitude: %f, Longitude: %f",_mapView.userLocation.coordinate.latitude,_mapView.userLocation.coordinate.longitude); 
    if(_mapView.userLocation.location.coordinate.latitude!=0.00 && _mapView.userLocation.location.coordinate.longitude!=0.00){ 

     //Update Player Object 
     [player setLatitude:_mapView.userLocation.location.coordinate.latitude]; 
     [player setLongitude:_mapView.userLocation.location.coordinate.longitude]; 

     [player updatePlayerLocation];//Update location to network 
     if(mapLoaded){//Map already loaded, call refresh 
      [self refreshMap]; 
     } 
     else{//First load of map 
      [_mapView setCenterCoordinate:_mapView.userLocation.location.coordinate]; 
      [self populateMap]; 
      [self openVault]; 
      mapLoaded = true;//Disable map first load 
      //timerMap = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(refreshMap) userInfo:nil repeats:YES];//Auto-Refresh of Map 
     } 
    } 
} 

回答

0

你似乎在試圖讓從_mapView.userLocation CLLocation對象的位置。

您應該使用locations數組中傳遞到方法中的最後一項。

documentation看到,guide with snippets

+0

尤里卡!因此,在審閱文檔之後,問題是一些緩存的「最後位置」被加載,從而導致3或4次調用委託方法。通過使用蘋果公司的無視具有舊時間戳的位置的示例,我只能獲取用戶的當前位置並忽略緩存的位置。感謝您治療我的頭痛! – JimmyJammed

+0

不客氣!很高興我能幫上忙。 –