2013-02-20 104 views
0

我在我的IOS應用程序中收到錯誤。我在谷歌和這裏搜索,但沒有找到具體的解決方案!didUpdateUserLocation不調用視圖重新加載

我有一個叫做mapView的viewController,在我的應用程序的兩個時刻使用,這個視圖包含一個MKMapView和代碼。

在我mapView.h有:

@property (strong, nonatomic) IBOutlet MKMapView *mapSpot; 

在我mapView.m有:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [mapSpot setShowsUserLocation:YES]; 
} 

- (void) mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{  
    MKCoordinateRegion region   = MKCoordinateRegionMakeWithDistance([userLocation coordinate], 500, 500); 
    [mapSpot setRegion:region animated:YES]; 
} 

所以,在第一瞬間的MapView到其他視圖控制器使用我加載:

@property (strong, nonatomic) ViewMap *mapView; 

mapView       = [[ViewMap alloc] initWithNibName:@"ViewMap" bundle:nil]; 
[self.view addSubview:[mapView view]]; 

我卸載該ViewController和另一個ViewController在其他時刻我再次加載MapView,但在t他的時刻的方法: - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation不被調用。

我驗證,如果第一個ViewController被卸載,那是。

當我加載第二個ViewController時,有一個MapView的新實例,但不調用委託方法。

任何人都知道這件事?

感謝

========================================= =========================================

編輯和已解決:

+1

你應該發佈你的解決方案作爲答案並接受你自己的答案。 – Jano 2013-02-22 21:23:54

+0

答案已添加解決方案,謝謝 – sidneivl 2013-02-25 20:04:18

+0

答案在哪裏?我有同樣的問題 – Georg 2015-06-18 13:57:42

回答

0

的問題是您要添加的視圖的方式,在該行

[self.view addSubview:[mapView view]]; 

如果只添加未執行的控制器編碼的觀點,而不是你必須出示mapView,例如:

[self presentViewController:mapView animated:YES completion:nil]; 
+0

這是不是問題,我試過使用presentViewController和問題沒有解決,並在iphone presentViewController加載視圖全屏,並且它是不可能在我的應用程序。 – sidneivl 2013-02-20 18:38:14

+0

其他問題是,爲什麼當我第一次加載時,當我重新加載相同的視圖工作,以及當我更改視圖不起作用時,工作完美?謝謝 – sidneivl 2013-02-21 00:40:51

0

上面的問題,也許會發生,因爲我使用模擬器來測試應用程序,以及如何模擬器不會改變位置地圖沒有得到didUpdateUserLocation:

這是我查看代碼後可以得到的唯一解釋,組織類讀取文檔並再次出錯。

現在,我正在使用CLLocationManager獲取位置,第一次獲取位置後,我停止了它。

將來我會實現一個跟蹤用戶路徑的系統,所以使用CLLocationManager是不可避免的。

更改後的代碼mapView.m:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    locationManager      = [[CLLocationManager alloc] init]; 
    locationManager.delegate   = self; 
    locationManager.distanceFilter  = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy  = kCLLocationAccuracyBest; 
    [locationManager startUpdatingLocation]; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ 
    CLLocation *loc = [locations lastObject]; 

    // store the location to use in any moment, it needs to be checked because the first time when get the coordinate not pass infos to load places according the current position 
    if (!location.latitude) { 
     location       = [loc coordinate]; 

//  set center the map at the current position 
     MKCoordinateRegion region   = MKCoordinateRegionMakeWithDistance(location, 500, 500); 
     [mapSpotView setRegion:region animated:YES]; 

     [[NSNotificationCenter defaultCenter] postNotificationName:@"loadPlaces" object:nil]; 

     [locationManager stopUpdatingLocation]; 
    } 
} 

,如果有人有更好的解決辦法,請張貼在這裏!

就是這樣!