我想要達到的是顯示與城市名稱的註釋。iPhone - MKReverseGeocoder - 如何確保我有結果返回
所以我有一個類的MapPoint:
@interface MapPoint : NSObject<MKAnnotation,MKReverseGeocoderDelegate> {
NSString* title;
NSString* cityName;
CLLocationCoordinate2D coordinate;
MKReverseGeocoder* reverseGeo;
}
@property (nonatomic,readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic,copy) NSString* title;
@property (nonatomic,copy) NSString* cityName;
-(id) initWithCoordinate:(CLLocationCoordinate2D)c tilte:(NSString*)t;
@end
我實現這樣的:
@implementation MapPoint
@synthesize title,coordinate,cityName;
-(id) initWithCoordinate:(CLLocationCoordinate2D)c tilte:(NSString*)t
{
[super init];
coordinate = c;
reverseGeo = [[MKReverseGeocoder alloc] initWithCoordinate:c];
reverseGeo.delegate = self;
[reverseGeo start];
[self setTitle:t];
return self;
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
NSString* city = [placemark.addressDictionary objectForKey:(NSString*)kABPersonAddressCityKey];
NSString* newString = [NSString stringWithFormat:@"city-> %@",city];
[self setTitle:[title stringByAppendingString:newString]];
}
-(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{
NSLog(@"error fetching the placemark");
}
-(void)dealloc
{
[reverseGeo release];
[cityName release];
[title release];
[super dealloc];
}
@end
然後,在我的CoreLocation委託我使用的MapPoint這樣的:
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
MapPoint* mp = [[MapPoint alloc] initWithCoordinate:[newLocation coordinate] tilte:[locationTitleField text]];
[mapView addAnnotation:mp];
[mp release];
}
現在,我有兩個問題我不確定:
它是正確的把reverseGeo作爲數據成員,或者一個更好的選擇是初始化裏面只是 頁頭,並釋放它的didFindPlacemark/didFailWithError代表內(它甚至有可能在那裏釋放它)?
我怎樣才能確保當我的註釋顯示我肯定知道reverseGeo帶回答(地標或錯誤 - 無論它是什麼)。 也許這只是錯誤的等待網絡響應,我應該離開它 - 我只是不確定何時/如果網絡響應將到達它將相應更新MapView中的annotationView。
請儘量詳細說明。 謝謝
這或多或少什麼,我想,但後來我開始思考我在寫我的帖子。 1.你看,獲取地標是一個網絡請求,我真的想等到我拿回來,而不是之前顯示註釋嗎?如果以後我會更新標題屬性它會反映在mapView? 2. 現在,我爲每個註解(MapPoint內部)分配一個新的MKReverseGeocoder,這是正確的方式嗎? 還是有辦法使用同一個,只是改變它的座標? – Idan 2010-08-15 05:45:41
MKReverseGeocoder已在iOS5中棄用。如果您現在開始開發應用程序,則應該使用CLGeocoder,否則,您可能需要稍後再進行遷移。 – Axel 2012-05-28 10:03:21