2010-10-13 21 views
10

जब मैं अपना जीपीएस ऐप चलाता हूं तो मैं इसे यादृच्छिक रूप से प्राप्त करता रहता हूं। यह हर बार नहीं होता है, और पारित निर्देशांक हमेशा वैध होते हैं (मैं उन्हें nslog)। क्या इनके लिए कहीं दस्तावेज है?MKErrorDomain त्रुटि 4 आईफोन

संपादित करें:

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

और उसके बाद के बारे में आधे समय यह एक त्रुटि देता है। अगर कोई त्रुटि हुई तो मैंने जिओकोडर को रिहा कर और फिर से असाइन करने का प्रयास किया, लेकिन इससे मदद नहीं मिली। केवल एक चीज जो ऐप को पुनरारंभ कर रही थी।

+0

मुझे हाल ही में एक ही त्रुटि मिलना शुरू हो गया। यह मेरे लिए भी अनियमित है - कभी-कभी जियोकोडर ठीक काम करता है, कभी-कभी यह हर बार समान या बहुत समान निर्देशांक पास करते समय एक त्रुटि देता है। शायद Google Geocoder कुछ समस्याएं हो रही है? –

+0

एक ही समस्या है। कभी-कभी यह Maps.app में काम करता है लेकिन मेरे ऐप में नहीं। फिर यह फिर से काम करता है। शायद Google के सर्वर पर एक लोड मुद्दा? –

उत्तर

3

मैं इस त्रुटि को बार-बार मार रहा हूं, और यह समझने में असमर्थ था कि इसे कैसे रोकें; लेकिन मुझे अंततः पूरे मुद्दे के आसपास एक अंतराल मिल गया जो काफी अच्छा काम करता है: केवल ऐप्पल के MKReverseGeocoder का उपयोग न करें - इसके बजाय, सीधे Google's reverse-geocoding API पर कॉल करें (यह स्पष्ट रूप से वही सेवा है जो MKReverseGeocoder करता है परदे के पीछे)। आप या तो JSON या XML (आपकी वरीयता) वापस प्राप्त कर सकते हैं, जिसे आपको फिर से विश्लेषण करना होगा, लेकिन यह बहुत कठिन नहीं है।

#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]; 
} 

वैसे:

उदाहरण के लिए, के बाद से मेरे ऐप ASIHTTPRequest उपयोग कर रहा है, यह क्या यह की तरह लग रहा है (हालांकि यह भी इस तरह के NSURLConnection के रूप में एप्पल के देशी एपीआई के साथ क्या से कोई लेना देना आसान होगा) है , Google के एपीआई में ऐप्पल की तरह ही नियम हैं। सुनिश्चित करें कि आप विशेष रूप से कोटा के संबंध में दस्तावेज़ पढ़ते हैं।

11

"MKTypes.h" MapKit ढांचे में में, निम्न परिभाषित किया गया है: मानचित्र किट ढांचे के लिए

त्रुटि स्थिरांक।

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

...

MKErrorPlacemarkNotFound

निर्दिष्ट स्थान-चिह्न नहीं पाया जा सका।

ऐसा लगता है कि आप अपने कोड में कुछ अज्ञात प्लेसमार्क का संदर्भ दे रहे हैं? या यह हो सकता है कि Google के पास आपके द्वारा पारित स्थिति के लिए कोई नाम नहीं है - हालांकि निर्देशांक मान्य हो सकते हैं।

+0

हाँ मैं उन स्थिरांकों में आया था, लेकिन समस्या यह है कि इसे कैसे ठीक किया जाए, और अधिक उत्सुकता से, यह यादृच्छिक रूप से क्यों प्रतीत होता है। क्या यह शायद अलग-अलग सटीकता के विभिन्न स्तरों को प्राप्त कर रहा है और अधिक/कम दशमलव स्थान हो रहा है? – Marty

+0

यदि आपने कुछ कोड पोस्ट किए हैं, जहां आपको यह त्रुटियां मिलती हैं, तो यह आपकी सहायता करने के लिए बहुत आसान होगा। –

+0

ऊपर संपादित देखें। – Marty

0

वास्तव में, मैं भी इस समस्या में भाग रहा हूं। कोड बेहद कॉम्पैक्ट

// 1 है। मौजूदा कॉर्ड के लिए मानचित्र पूछें

CLLocationCoordinate2D उपयोगकर्ता स्थान;

userLocation.latitude = [[_theMapView.user स्थान स्थान] समन्वय]। अक्षांश; उपयोगकर्ता स्थान। Longitude = [[_theMapView.user स्थान स्थान] समन्वय]। लम्बाई;

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

// 2। रिवर्स जियोकोड कॉर्ड

एमकेआरवीर्ससेगोकोडर * रिवर्सगोकोडर = [[एमकेआरवीर्सईकोकोडर ऑलोक] initWithCoordinate: userLocation];

[रिवर्स जिओकोडर सेट डिलीगेट: स्वयं];

[रिवर्स जिओकोडर प्रारंभ];

और बाद में बस असफल प्रतिनिधि विधि में त्रुटि एनएसएलॉग। यह पहली बार या दो काम करता है, तो

1

मैं सिर्फ इस समस्या पर अनुसंधान के एक बहुत के साथ किया गया है और यह हमारे हाथ से बाहर हो रहा है काम करना बंद। मैं डेवलपर मंचों के साथ ही चारों ओर ढेर और दूसरी जगहों की जाँच की और कोई भी एक अलग सेवा का उपयोग करने के अलावा किसी अन्य समाधान है। इस विषय पर https://devforums.apple.com/message/154126 पर एक बहुत अच्छा धागा है।

कुछ लोगों को एक निश्चित समय के बाद त्रुटि मिल जाए, मैं तो बस इसे खोजने के थोड़ी देर के लिए बाहर होने के लिए और फिर वापस आता है। मैंने "वर्तमान पता" नमूना कोड देखा और मैं नहीं देख सका कि मैं कैसे गड़बड़ कर सकता हूं।मैंने नमूना कोड चलाया और निश्चित रूप से पर्याप्त, यह एक स्थान लौटने की बजाय NSLogging त्रुटियां थी।

यह लिंक कुछ गूगल के रिवर्स जियोकोडर का उपयोग कर कोड है: http://www.iphonedevsdk.com/forum/iphone-sdk-development/31883-pbrequestererrordomain-errors-reverse-geocoding.html#post155793

2

मैं एक ही बात में चल रहा हूँ (ठीक उसी कोड बेतरतीब ढंग से कभी कभी विफल रहता है) और मुझे लगता है कि मैं इस सवाल का जवाब मिल गया है। Apple's developer docs से: "प्रत्येक मैप किट एप्लिकेशन में रिवर्स जियोकोडिंग क्षमता की सीमित मात्रा होती है, इसलिए रिवर्स जियोकोड अनुरोधों का उपयोग करने के लिए यह आपके लाभ के लिए है।"

तो मेरा सिद्धांत है, हम दर-सीमित हो रहे हैं ... क्योंकि कोई अन्य चर बदल रहा है (यानी मेरा कोड बदल नहीं रहा है, मैं इसे सिम्युलेटर पर चला रहा हूं ताकि डिवाइस का स्थान न हो ' टी बदल रहा है, आदि) मुझे लगता है कि यह एकमात्र शेष कारण होना चाहिए।

4

मैंने हाल ही में इस मुद्दे को पूरा किया है और हल किया है। मेरे मामले में, जब ऐप्पल मानचित्र को किसी क्वेरी के लिए कोई परिणाम नहीं मिल रहा है, तो कभी-कभी यह इस "MKErrorDomain = 4" त्रुटि को फेंक देगा। इसलिए मैंने इसे समाप्त कर दिया क्योंकि "परिणाम नहीं मिला"।

यह पता लगाने के लिए दर्दनाक था, मैपकिट को एक बेहतर त्रुटि प्रबंधन प्रणाली की आवश्यकता है।

संबंधित मुद्दे