MKMapView / 注釈 / UINavigationController に問題があります。基本的に、私は UINavigationController を使用してビューを管理します。ビューの 1 つに MKMapView が含まれており、addAnnotations メソッドを使用して注釈 (10 から 200) を追加します。
UINavigationController で「速すぎる」とナビゲートすると、iPhone シミュレーターがクラッシュし、「EXC BAD ACCESS」信号を受信します。たとえば、MKMapView を含むビューを読み込んで、すぐに UINavigationController ナビゲーション バーの [戻る] ボタンを押すと、シグナルが表示されます。問題は addAnnotations メソッドにあると考えました。 MKMapView が読み込まれると、それに注釈を追加しますが、すべてが非同期で行われるようです。「戻る」ボタンを押す前に1秒ほど待ってもエラーは発生しませんが、速すぎるとクラッシュします。addAnnotations 行を削除しても、エラーはまったく発生しません。addAnnotations メソッドが作業を完了する前に、私のビューが UINavigationController によって解放されたためだと思います。
これに対する良い解決策はありますか?ユーザーを待たせたくありません (たとえば、読み込み中のビューを表示するなど)。解決策はより良いメモリ管理かもしれないと思いますが、これを行う方法がわかりません。
if(DEBUG_MODE) { NSLog(@"Creating array of placemarks : begin"); }
self.placemarkCache = [[NSMutableArray alloc] init];
// Loading placemarks for a placemark dictionary
NSArray *sortedKeys = [[self.placemarkDictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];
for (id key in sortedKeys) {
MyPlacemark *currentPlacemark = [self.placemarkDictionary objectForKey:key];
[self.placemarkCache addObject:currentPlacemark];
[currentPlacemark release];
}
if(DEBUG_MODE) { NSLog(@"Creating array of placemarks : done"); }
if(DEBUG_MODE) { NSLog(@"Adding placemarks : begin"); }
[self.mapView addAnnotations:self.placemarkCache];
if(DEBUG_MODE) { NSLog(@"Adding placemarks : done"); }
この例では、マップに何かが表示される前に「目印を追加しています: 完了」というメッセージが表示されます。