2012-04-17 73 views
1

我試圖繪製兩個位置之間的路線。爲此,我有兩個CLLocation startPoin,endPoind實例。我想轉換這兩個位置兩個相應的位置地址。之後,我想從Google地圖webservice獲取所有路線點。下面的代碼也是如此。MKReverseGeocoder委託方法在單獨的線程上工作嗎?

​​

在viewDidLoad中我打電話的順序

[self update:startPoint];  //MKReverseGeocoder start point 
    [self update:endPoint]; //MKReverseGeocoder end point   
    [self updateRoute]; 

可惜方法[自updateRoute]正在執行首先與MKReverseGeocoder委託方法比較。在這個方法中,位置數組的值爲null。獲得EXEBADACCESS。我怎麼能超過這個價值。 裏面MKReverseGeocoder委託方法我得到的位置名稱。委託方法正在執行任何其他線程。

+0

MKReverseGeoCoder在iOS 5.0中已棄用。使用CLGeoCoder。 – 2014-04-04 09:41:20

回答

2

MKReverseGeocoder在iOS 5中已棄用,因此您應該使用CLGeocoder來代替。

那麼,是的,start方法是異步,如文檔中所示。這並不一定意味着你會在不同的線程上得到結果,但這意味着該方法通常會在結果可用之前返回。

當兩者都完成時,您需要跟蹤地理編碼器以調用您的updateRoute方法。

+0

updateLogout裏面的NSLog()第一個;目前我工作在ios 4 – Musthafa 2012-04-17 10:47:29

+0

非常感謝,怎麼可能過來這個問題... – Musthafa 2012-04-17 10:52:21

1

它是否在另一個線程上執行並不重要。重要的是,當你得到迴應時,你無法控制。

你應該有一些邏輯來說「當我得到一個開始和結束路線的值,請致電我的updateRoute方法」。您可以檢查startPoint變量的值是否在您獲得值endPoint(反之亦然)時設置,然後才調用updateRoute函數。

+0

Uing startPoint和endPoint我ReverseGecoder的位置名稱,並在NSMutableArray(位置)中存儲,此位置值爲null內updateRoute方法 – Musthafa 2012-04-17 10:46:42

0

如果你仍然想盡管這是不贊成使用這個....你應該打電話給你[self updateRoute];- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark只有[locations count]爲2

這樣,當你有兩個值的NSURLConnection的將被調用。

+0

我認爲這有效,但爲什麼會出現這個問題。? – Musthafa 2012-04-17 10:49:10

+0

因爲NSURLConnection甚至在你有來自MKReverseGeocoder的值之前被調用。 – 2012-04-17 10:50:33

+0

請看第二個答案。 – Musthafa 2012-04-17 10:54:39