MKMapView不调用委托方法

cri*_*kid 10 iphone mapkit

在UIViewController中,我将MKMapView添加到控制器控制的视图中.

- (void)viewDidLoad {
[super viewDidLoad];
CGRect rect = CGRectMake(0, 0, 460, 320);
map = [[MKMapView alloc] initWithFrame:rect];
map.delegate = self;
[self.view addSubview:map];
 }
Run Code Online (Sandbox Code Playgroud)

后来我在控制器中

- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
     NSLog(@"done.");
}
Run Code Online (Sandbox Code Playgroud)

完成永远不会被打印.其他任何委托方法都不像mapView一样调用:viewForAnnotation:我在另一个应用程序中使用MKMapView,但这似乎发生在我制作的任何新应用程序上.有没有人见过这种行为?

编辑:

问题似乎是当UIViewController成为MKMapView的委托时,NSObject的直接子类似乎工作正常.我可以像这样解决这个问题,因为我之前已经做过,所以看起来仍然很奇怪.

Bla*_*ird 9

我有完全相同的问题:我已经将<MKMapViewDeledate>分配给我的控制器,并将委托链接到Interface Builder中的"文件所有者",但仍然没有调用我实现的委托方法.

原因是,自iOS 4以来,地图被缓存,每当应用程序显示缓存的地图时,都不会调用诸如"mapViewDidFinishLoadingMap"之类的方法.重置模拟器中的"内容和设置"会清除缓存的地图,从而解决问题.

  • 只需重置我的设备上的"内容和设置",并确保在第一次运行时调用这些方法.但第二次运气没有运气! (2认同)
  • 嗯,似乎`mapViewDidFinishLoadingMap:mapView`不是很有用. (2认同)

小智 7

有点旧,但自iOS 7以来,有一种新方法可行.解决了我的问题

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Run Code Online (Sandbox Code Playgroud)


pra*_*ash 1

也许很明显,但只需检查:

您是否确保您的视图控制器声明正确完成?就像是:

@interface YourViewController : UIViewController <MKMapViewDelegate>
Run Code Online (Sandbox Code Playgroud)