6

iOS 4.3(GM Seed 10M2518)以降、を使用するとクラッシュしMKReverseGeocoderます。reverseGeocoder:didFailWithError:次のようなエラーで頻繁に呼び出されます。

Error Domain=NSURLErrorDomain Code=-1011 "The operation couldn’t be completed. (NSURLErrorDomain error -1011.)" UserInfo=0x339900 {PBHTTPStatusCode=503}

アプリはこれらの瞬間にクラッシュする傾向があります。これは、以前のバージョンのiOSには当てはまりませんでした。

何が起こったのかアイデアはありますか?

4

6 に答える 6

5

障害時に逆ジオコーダーを時期尚早に解放しないように注意してください。

に変更[_reverseGeocoder release]すると、問題[_reverseGeocode autorelease]-(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error修正されました。

于 2011-03-14T14:01:39.260 に答える
4

Googleは、単一のデバイスが60秒以内にその場所を複数回取得することを許可していません。したがって、(MKReverseGeocoder *)geocoder didFailWithErrorの場合、別のメソッド(代わりにhttpリクエスト、JSONが必要)を使用します。

4.3.3(3GS)で動作し、クラッシュすることなくユーザーの位置を連続して取得するために30〜40回テストされました。お役に立てば幸いです!

- (void) retrieveCurrentLoc {
self.geoCoder =
[[[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate] autorelease];
    geoCoder.delegate = self;

    [geoCoder start];
}

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{

NSString *fetchURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?    q=%@,%@&output=json&sensor=true", [NSString     stringWithFormat:@"%f",mapView.userLocation.location.coordinate.latitude], [NSString      stringWithFormat:@"%f",mapView.userLocation.location.coordinate.longitude]];
    NSURL *url = [NSURL URLWithString:fetchURL];
    NSString *htmlData = [NSString stringWithContentsOfURL:url];

SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *json = [parser objectWithString:htmlData error:nil];
NSArray *placemark = [json objectForKey:@"Placemark"];
if ([[[[[placemark objectAtIndex:0]     objectForKey:@"AddressDetails"]objectForKey:@"Country"]objectForKey:@"Thoroughfare"]objectFor  Key:@"ThoroughfareName"] != NULL){
    currentAddress = [[[[[placemark objectAtIndex:0]     objectForKey:@"AddressDetails"]objectForKey:@"Country"]objectForKey:@"Thoroughfare"]objectFor  Key:@"ThoroughfareName"];}
else {
    currentAddress = [[placemark objectAtIndex:0] objectForKey:@"address"];
    }
}
于 2011-07-21T15:10:05.440 に答える
2

ここでも同じ問題があり、さまざまな解決策を確認しましたが、機能しませんでした。503応答コードは以前のOSとは異なる方法で処理され、iPhoneトラフィックをスニッフィングすることで簡単に気付くことができます。

MKReverseGeocoder(Gowallaなど)に依存するアプリケーションは、Appleに対していくらかの圧力をかけるでしょう...したがって、私は最近4.3.1ホットフィックスが来ることを期待しています。または、GoogleがAppleのリクエストでSLAを変更します。

于 2011-03-11T11:46:49.677 に答える
1

zippo77の回答に続いて、最初にMKReverseGeocoderデリゲートをnilに設定すると最良の結果が見つかりました。-(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error

_reverseGeocoder.delegate = nil;
[_reverseGeocoder autorelease];
于 2011-04-07T09:36:40.903 に答える
1

MKReverseGeocoder私のコードは(MKReverseGeocoderグローバルautorelease変数として) Appleの例の1つに従ったにもかかわらず、同じ問題が発生しました。また、この問題はiOS 4.3でのみ発生しました(4.0は問題なく実行されていました)。

私にとって問題を解決したのは、パーツを削除して、ビューの唯一のautorelease部分を解放することでした。MKReverseGeocoderdealoc

于 2011-04-28T12:37:46.483 に答える
1

おそらく、ジオコーダーが目印を見つける前にロケーションマネージャーを停止しています。didFindPlacemarkで実行するか、エラーが発生した場合

于 2011-08-09T10:37:27.337 に答える