10

構築しているgpsアプリを実行すると、これがランダムに取得され続けます。毎回発生するわけではなく、渡された座標は常に有効です(それらをnslogします)。これらのドキュメントはどこかにありますか?

編集:

CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(locManager.location.coordinate.latitude, locManager.location.coordinate.longitude);
geocoder1 = [[MKReverseGeocoder alloc] initWithCoordinate:coord];
geocoder1.delegate = self;
[geocoder1 start];

そして、約半分の時間でエラーが返されます。エラーが発生した場合は、ジオコーダーを解放して再割り当てしようとしましたが、それは役に立ちませんでした。したのはアプリを再起動することだけでした。

4

6 に答える 6

11

MapKitフレームワークの「MKTypes.h」では、次のように定義されています。

マップキットフレームワークのエラー定数。

enum MKErrorCode {
   MKErrorUnknown = 1,
   MKErrorServerFailure,
   MKErrorLoadingThrottled,
   MKErrorPlacemarkNotFound,
};

..。

MKErrorPlacemarkNotFound

指定された目印が見つかりませんでした。

これは、コード内の不明な目印を参照しているように聞こえますか?または、通過する位置の名前がGoogleにない可能性がありますが、座標は有効である可能性があります。

于 2010-10-13T18:56:49.457 に答える
5

私は最近この問題に出会い、解決しました。私の場合、Apple Mapがクエリの結果を見つけることができないと、この「MKErrorDomain=4」エラーがスローされることがあります。そのため、これを「結果が見つかりません」として扱うことになりました。

これを見つけるのは骨の折れる作業でした。MapKitにはより優れたエラー処理システムが必要です。

于 2013-11-09T00:47:52.240 に答える
3

私はこのエラーを繰り返し発生していて、それを停止させる方法を理解できませんでした。しかし、私はついに問題全体を回避するエンドランを見つけました。これは非常にうまく機能し、もう少し作業が必要です。Appleをまったく使用しないでください。代わりに、 Googleの逆ジオコーディングAPIMKReverseGeocoderを直接呼び出します(これは明らかに同じサービスです)。それは舞台裏で行われます)。JSONまたはXML(好み)のいずれかを取り戻すことができ、それを解析する必要がありますが、それはそれほど難しいことではありません。MKReverseGeocoder

たとえば、私のアプリはを使用してASIHTTPRequestいるので、これは次のようになります(ただし、これは、などのAppleのネイティブAPIを使用して行うのも簡単ですNSURLConnection)。

#pragma mark -
#pragma mark CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
           fromLocation:(CLLocation *)oldLocation
{
    // Be careful: My code is passing sensor=true, because I got the lat/long
    // from the iPhone's location services, but if you are passing in a lat/long
    // that was obtained by some other means, you must pass sensor=false.
    NSString* urlStr = [NSString stringWithFormat:
      @"http://maps.googleapis.com/maps/api/geocode/xml?latlng=%f,%f&sensor=true",
      newLocation.coordinate.latitude, newLocation.coordinate.longitude];
    NSURL* url = [NSURL URLWithString:urlStr];
    self.reverseGeocoderRequest = [ASIHTTPRequest requestWithURL:url];
    self.reverseGeocoderRequest.delegate = self;
    [self.reverseGeocoderRequest startAsynchronous];
}

ちなみに、GoogleのAPIには、Appleと同じようにルールがあります。特にクォータに関しては、必ずドキュメントをお読みください。

于 2011-01-28T22:39:35.817 に答える
2

私は同じことに遭遇していて(まったく同じコードがランダムに失敗することがあります)、答えを見つけたと思います。Appleの開発者向けドキュメントから:「各Map Kitアプリケーションには、逆ジオコーディングの容量が限られているため、逆ジオコーディング要求を控えめに使用することをお勧めします。」

つまり、私の理論では、レート制限が発生しています...他の変数が変更されていないため(つまり、コードが変更されていない、シミュレーターで実行されているため、デバイスの場所が変更されていないなど) 。)これが唯一の残りの理由であるに違いないと思います。

于 2011-01-27T21:45:52.550 に答える
1

私はこの問題について多くの研究を終えたばかりであり、それは私たちの手の届かないところにあるようです。私は開発者フォーラムだけでなく、Stackやその他の場所全体をチェックしましたが、別のサービスを使用する以外に解決策はありません。この件については、 https://devforums.apple.com/message/154126にかなり良いスレッドがあります。

一定時間後にエラーを見つける人もいますが、しばらくの間エラーが発生してから戻ってきます。「現在の住所」のサンプルコードを調べましたが、どのように混乱したのかわかりませんでした。サンプルコードを実行しましたが、確かに、場所を返すのではなく、NSLoggingエラーでした。

このリンクには、Googleの逆ジオコーダーを使用したコードが含まれています:http ://www.iphonedevsdk.com/forum/iphone-sdk-development/31883-pbrequestererrordomain-errors-reverse-geocoding.html#post155793

于 2010-10-24T00:55:14.940 に答える
0

実際、私もこの問題に直面しています。コードは非常にコンパクトです

//1。現在の座標について地図を尋ねる

CLLocationCoordinate2D userLocation;

userLocation.latitude =[[_theMapView.userLocationlocation]座標].latitude; userLocation.longitude =[[_theMapView.userLocationlocation]座標].longitude;

NSLog(@ "%f、%f"、userLocation.latitude、userLocation.longitude);

//2。逆ジオコード座標

MKReverseGeocoder * reverseGeocoder = [[MKReverseGeocoder alloc] initWithCoordinate:userLocation];

[reverseGeocoder setDelegate:self];

[reverseGeocoder開始];

その後、単に失敗デリゲートメソッドのエラーをNSLogします。最初に1、2回動作し、その後動作を停止します

于 2010-10-18T20:21:56.700 に答える