あったらしくるえるはてなくしょん

id:kskmeuk あったらしく

mapView の、addAnnotation: と、addAnnotations: がどちらも、- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 呼ぶんだけど、そのせいで、無駄にハマってた件...

こんにちてゃ。

こんなところで、はまってて、ちょっとおばかだなーと思ったんだけど、これ、ちょっと名前も変だなーと思ったし、もしかしたら、同じところで妙なハマりかたする人が将来いるかもしれないから、ちょっと書いておきます。iOS6 で地図がーみたいになってますが、MapKit つかってて残念な思いをしている方もいると思います。そんな MapKit のお話です。

MKMapView は、地図上に、pin とか annotation をおくときに、二つ方法があって、annotation 単品と、annotations として、配列を投げることが出来ますよね

    [mapView addAnnotation:<#(id<MKAnnotation>)#>]; #単品
    [mapView addAnnotations:<(NSArray *)>] #複数

みたいに。

で、これらで、実際に追加されたタイミングで、

-(MKAnnotationView*)mapView:(MKMapView*)mapView 
viewForAnnotation:(id <MKAnnotation>)annotation

これが呼ばれるので、どんな具合で view を返すかとか書いて、

  - (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views

さらに、これが追加で呼ばれて、追加されるときの表示の具合をいろいろいじったりするんですけど、上記、addAnnotation: だと、views に長さ1 のNSArray が帰ってきて、addAnnotations: だと、views にそのまま配列帰ってくるんですね。

んで、addAnnotation: で、annotation ひとつずつ投げる処理を書いてると、didAddAnnotationViewsの方でまとまった処理ができないので、へんだなーと思ってたら、addAnnotations: で投げないとだめだったという...。いや、しょぼいところではまってしまった...

だから、もう NSArray で複数のデータの、annotations 渡すときは、

    [mapView addAnnotations:<(NSArray *)>] #複数

こっちで渡しておいた方が、へんなハマり方しなくて良さそうですねという話題でした。viewForAnnotation は 1個で、didAddAnnotationViews は複数でさ、なんか呼ばれ方のタイミングおかしいからなんじゃらほいと思ってたんだけど、なんともはや。いろんな命名規則の話しあるけど、単数と複数形はけっこうクリティカルですよね。いや、私がおばかちゃんだったんですけど。

Perlベストプラクティス

Perlベストプラクティス

これとか、Perl に限らずとも、ちょっとした素敵なプログラミングTipsのってるから、一度読むと、いいことが結構ありますよね。


では、良い複数形で、良い人生を。