2013-10-18 8 views
8

मैं CLLocation संरचना द्वारा शहर के नाम को रिवर्स के साथ परिभाषित करने की कोशिश कर रहा हूं ... CLGeocoder ऑब्जेक्ट के लिए विधि अनुरोध, लेकिन मुझे नहीं पता कि टाइमआउट कैसे सेट करें? यदि कोई इंटरनेट कनेक्शन अनुरोध समय नहीं है तो इसमें लगभग 30 सेकंड लग सकते हैं - यह बहुत लंबा है ...CLGeocoder टाइमआउट कैसे सेट करें?

उत्तर

2

इस बात को संभालने के लिए कोई भी कार्यक्षमता नहीं है जिसे मैं जानता हूं। मैंने निम्नलिखित समाधान का उपयोग करना शुरू कर दिया है। यह स्विफ्ट में माफ़ी है, मैं स्पष्ट उद्देश्य-सी नहीं बोलता।

यह आपको एक 2 दूसरा टाइमआउट

func myLookupFunction(location: CLLocation) 
{ 
    let timer = NSTimer(timeInterval: 2, target: self, selector: "timeout:", userInfo: nil, repeats: false); 
    geocoder.reverseGeocodeLocation(location){ 
     (placemarks, error) in 
     if(error != nil){ 
      //execute your error handling 
     } 
     else 
     { 
      //execute your happy path 
     } 
    } 
    NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode) 
} 

func timeout(timer: NSTimer) 
{ 
    if(self.geocoder.geocoding) 
    { 
     geocoder.cancelGeocode(); 
    } 
} 

दे देंगे टाइमआउट आग के बाद, अपने कॉलबैक निष्पादित किया जाएगा और त्रुटि मार्ग के नाम से जाना है।

आप विवरण के साथ एक त्रुटि प्राप्त होगी:

  • कोड = 10
  • विवरण स्थानीयकृत (अंग्रेजी) = कार्रवाई पूरी नहीं हो सकता है। (kCLErrorDomain त्रुटि 10.)

आशा है कि इससे मदद मिलती है।

0
स्विफ्ट 3 में

@ JTango18 जवाब:

func myLookupFunction(location: CLLocation) 
{ 
    let timer = Timer(timeInterval: 2, target: self, selector: #selector(self.timeout), userInfo: nil, repeats: false); 
    geocoder.reverseGeocodeLocation(location){ 
     (placemarks, error) in 
     if(error != nil){ 
      //execute your error handling 
     } 
     else 
     { 
      //execute your happy path 
     } 
    } 
    RunLoop.current.add(timer, forMode: RunLoopMode.defaultRunLoopMode) 
} 

func timeout() 
{ 
    if (geocoder.isGeocoding){ 
     geocoder.cancelGeocode() 
    } 
} 
संबंधित मुद्दे