MKMapView
何らかの意味で模倣するインターフェイスを実現する必要があります。具体的には、メソッドをサポートする必要があります
-(void)addAnnotation:(id<MyAnnotation>)annotation;
-(UIView *)viewForAnnotation:(id<MyAnnotation>)annotation;
UIView
内部的には、注釈をオブジェクト (null の場合もある)にマップするマッピングがあります。
では、これらの注釈と対応するビューをどのように保存すればよいでしょうか? 自然な選択は次のようになりますNSMutableDictionary
。
@property(nonatomic) NSMutableDictionary *m_dict;
-(void)addAnnotation:(id<MyAnnotation>)annotation {
UIView *view = ....;
if (view) {
[_m_dict setObject:view forKey:annotation];
}
else {
[_m_dict setObject:[NSNull null] forKey:annotation];
}
}
-(UIView *)viewForAnnotation:(id<MyAnnotation>)annotation {
id ret = [_m_dict objectForKey:annotation];
if ([ret isKindOfClass:[UIView class]]) {
return ret;
}
return nil;
}
id<MyAnnotation>
しかし、適合する保証がないため、機能しませんNSCopying
。
id<MyAnnotation>
生のポインターに保存してから、そのポインターをNSNumber
(に準拠する) に格納することを考えましたNSCopying
。しかし、これが良いアイデアであり、安全に実装する方法はわかりません。