为 MapKit 设置单独的委托类的正确方法是什么?
我有 MapView 类子类化 MKMapView 和符合 MKMapViewDelegate 协议的裸 MapDelegate 类只有一个初始化方法。
这是我使用的 MapView 初始化方法的摘录:
# MapView.m ...
@implementation MapView
- (id) initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// [self setShowsUserLocation:YES];
[self setDelegate:[[MapDelegate alloc] initWithMapView:self]];
MapDelegate 类拥有的唯一方法是
# MapDelegate.m ...
- (id)initWithMapView:(MapView *)aMapView {
self = [super init];
self.mapView = aMapView;
return self;
}
拥有[self setShowsUserLocation:YES]; 评论说,一切正常 - 我看到了地图。如果我取消注释这一行,我的应用程序开始崩溃。
我的 MapDelegate 类缺少什么?
更新 1:如果我不使用单独的类 MapDelegate 并仅设置 setDelegate:self - 一切正常。
更新2:现在我明白了[self setDelegate:[[MapDelegate alloc] initWithMapView:self]];的问题。字符串是我需要 MapDelegate 类的寿命比现在长(委托属性具有弱属性)。如果我执行以下操作:
@property (strong) id delegateContainer;
....
[self setDelegateContainer:[[MapDelegate alloc] init]];
[self setDelegate:self.delegateContainer];
...有用!是否有更好的方法来保留 MapDelegate 生命周期以及 MKMapView 的生命周期?
谢谢!