0

route-me マーカーを非表示にするのに少し問題があるようです。それらは正常に表示されているように見えますが、for ループで非表示にしようとすると、クラッシュするようです。ここに私が持っているものがあります:

- (void) tapOnMarker: (RMMarker*) marker onMap: (RMMapView*) map{
   NSArray* markers = mapView.markerManager.markers;
   for(RMMarker *mk in markers) {
       [mk hideLabel];
   }
   [marker showLabel];
}

理論上の for ループは、マーカー マネージャーにあるすべてのマーカーをループして非表示にする必要がありますが、代わりに次のエラー メッセージでクラッシュします。

-[RMMapLayer hideLabel]: unrecognized selector sent to instance 0x83f7680
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[RMMapLayer hideLabel]: unrecognized selector sent to instance 0x83f7680'
*** First throw call stack:
(0x1b91012 0x1959e7e 0x1c1c4bd 0x1b80bbc 0x1b8094e 0x4afa 0x6978a 0x8d433f 0x8d4552 0x8b23aa 0x8a3cf8 0x256bdf9 0x256bad0 0x1b06bf5 0x1b06962 0x1b37bb6 0x1b36f44 0x1b36e1b 0x256a7e3 0x256a668 0x8a165c 0x2b75 0x2a75)
libc++abi.dylib: terminate called throwing an exception

このエラー メッセージをよく見ると、なぜ RMMapLayer を呼び出しているのですか? hideLabel 関数は RMMarker クラスにあります。具体的には「RMMarker *mk in maps」と書いています。ここで何が間違っていますか?どうぞよろしくお願いいたします。

4

1 に答える 1

1

for ループで次のようなことを試してください。

 if ([mk isKindOfClass:[RMMarker class]])
    [mk hideLabel];
 else
    NSLog(@"We have a different class here:  %@", [mk class]);

「respondsToSelector」メソッドを使用してそれを防ぐこともできます...

于 2012-11-12T20:40:48.200 に答える