didUpdateUserLocation没有调用视图重新加载

时间:2013-02-20 18:07:32

标签: ios delegates mapkit mkmapviewdelegate

我的IOS应用程序出错了。我在谷歌和这里搜索过,但找不到具体的解决方案!

我有一个名为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加载到其他ViewController中
@property (strong, nonatomic) ViewMap *mapView;

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

我卸载了ViewController,在另一个ViewController中,我再次加载MapView,但此时方法: - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation not called。< / p>

我验证第一个ViewController是否已卸载,那是。

当我加载第二个ViewController时,会有一个新的MapView实例,但不会调用委托方法。

有人对此有所了解吗?

由于

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

编辑并解决:

2 个答案:

答案 0 :(得分:0)

问题在于您在此行中添加视图的方式

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

如果您只添加视图,则不会执行控制器代码,而是必须提供mapView,例如:

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

答案 1 :(得分: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];
    }
}

如果有人有更好的解决方案,请发布在这里!

那就是它!