0

MKReverseGeocoder(reversegeocoder)を使用して、ユーザーの現在地を取得しています。CLLocationManagerのlocationDidUpdatedToLocationメソッドでreversegeocoderを呼び出しています。

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{

if(!reverseGeocoder )
    {
        NSLog(@"geocoder is nill");
        reverseGeocoder=[[MKReverseGeocoder alloc] initWithCoordinate:[newLocation coordinate]];
        reverseGeocoder.delegate=self;
        [reverseGeocoder start];
        NSLog(@"geocoder allocated");
    }

    else
    {
        NSLog(@"geocoder is not nill");


        if(reverseGeocoder.querying)
        {
        //do nothing ;
        }
        else
        [reverseGeocoder release];

    }

}

.queryingプロパティは、reversegeocoderがクエリを完了したときにのみ解放されるようにするために使用されます。ただし、実行後3〜4秒以内にアプリケーションがクラッシュし、エラーメッセージが表示される場合

-[MKReverseGeocoder isQuerying]: message sent to deallocated instance

ここで何が欠けていますか?

よろしくお願いします。

4

1 に答える 1

1

解放する前にジオコーダーのデリゲートを nil に設定していないことが原因でしょうか? または、ポインターを無効にしていないことはありますか?

これを試して:

    if(reverseGeocoder.querying)
    {
            //do nothing ;
    }
    else
    {
            [reverseGeocoder setDelegate:nil];
            [reverseGeocoder release];
            reverseGeocoder = nil;
    }
于 2011-09-14T14:23:51.127 に答える