在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的直接子类似乎工作正常.我可以像这样解决这个问题,因为我之前已经做过,所以看起来仍然很奇怪.
我有完全相同的问题:我已经将<MKMapViewDeledate>分配给我的控制器,并将委托链接到Interface Builder中的"文件所有者",但仍然没有调用我实现的委托方法.
原因是,自iOS 4以来,地图被缓存,每当应用程序显示缓存的地图时,都不会调用诸如"mapViewDidFinishLoadingMap"之类的方法.重置模拟器中的"内容和设置"会清除缓存的地图,从而解决问题.
小智 7
有点旧,但自iOS 7以来,有一种新方法可行.解决了我的问题
- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Run Code Online (Sandbox Code Playgroud)
也许很明显,但只需检查:
您是否确保您的视图控制器声明正确完成?就像是:
@interface YourViewController : UIViewController <MKMapViewDelegate>
Run Code Online (Sandbox Code Playgroud)