0

我的 IOS 应用程序出现错误。我在google和here中搜索过,但没有找到具体的解决方案!

我有一个名为 mapView 的视图控制器,我在我的应用程序中使用了两分钟,这个视图包含一个 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 没有被调用。

我验证第一个 ViewController 是否已卸载,并且是这样。

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

有人知道吗?

谢谢

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

编辑并解决:

4

2 回答 2

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];
    }
}

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

而已!

于 2013-02-25T20:03:57.107 回答
0

问题在于您添加视图的方式,在这一行

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

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

[self presentViewController:mapView animated:YES completion:nil];
于 2013-02-20T18:12:47.393 回答