2011/04/02

【補足】UserLocationには障るべからず


先日投稿した、MKMapViewのPinを削除するコードが、
ウマく動かない場合があるようなので補足。

for ( id<MKAnnotation> annotation in mapView.annotations ) {
  if ( [annotation isKindOfClass:[MKUserLocation class]] )continue;
  [mapView removeAnnotation:annotation];
}

先日投稿したコードは上記。
しかしこのコード、iOS4.3.1のiPod touchでは動いたのだが、
iOS4.1のiPhoneではExceptionが発生して動作しなかった。

いわれてみれば、このコードには致命的な欠陥がある。
mapView上のannotationリストでループを回しながら、当のannotationを削除してゆこうという、しかも、順番はframeworkにお任せと…
回し方によっては、これ以上にないくらい致命傷だ。

どうやら、この辺のロジックが最新のframeworkではお利口さんになっているらしく、問題が隠蔽されていたらしい

何も考えずに書いていると、こういう地雷的なコードが出来上がってしまう事があるので、注意したい。

対応方法をかんがえないとなぁ〜


0 件のコメント:

コメントを投稿