ある意味でMKMapView
を模倣するインターフェイスを実現する必要があります。具体的には、私は内部(nullの可能性がある)UIView
オブジェクトに注釈をマッピングするマッピングがある方法NSCopyingでないIDキーでデータを保存する方法
-(void)addAnnotation:(id<MyAnnotation>)annotation;
-(UIView *)viewForAnnotation:(id<MyAnnotation>)annotation;
をサポートする必要があります。
これらのアノテーションと対応するビューはどのように保存する必要がありますか? id<MyAnnotation>
はNSCopying
に準拠していることを保証がないため、
@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;
}
しかし、それは動作しません:自然な選択はNSMutableDictionary
だろう。
生ポインタにid<MyAnnotation>
を保存してからNSNumber
(NSCopying
に準拠)にポインタを格納することを考えました。しかし、私はこれが良いアイデアであり、安全に実装する方法はわかりません。
NSHashTableを考慮しましたか? http://nshipster.com/nshashtable-and-nsmaptable/ – Mats