2013-10-18 220 views
8

我試圖通過CLLocation結構與reverse ...定義城市名稱...方法請求CLGeocoder對象,但我不知道如何設置超時?如果沒有互聯網連接請求時間可能需要大約30秒 - 它太長了...CLGeocoder如何設置超時?

回答

2

沒有任何內置的功能來處理這個,我知道。我已經開始使用以下解決方案。我很抱歉它在Swift中,我不會說流利的Objective-C。

這會給你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

@ JTango18答案斯威夫特3:

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() 
    } 
}