我不認爲我理解塊在這種情況下的工作方式。我試圖從CLGeocoder獲取位置,並在塊完成後保存MKPlacemark。因此,在此方法中:將其設置在塊內後,該變量爲空
- (MKPlacemark *)placeMarkFromString:(NSString *)address {
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
__block MKPlacemark *place;
[geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
[placemarks enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%@", [obj description]);
}];
// Check for returned placemarks
if (placemarks && [placemarks count] > 0) {
CLPlacemark *topResult = [placemarks objectAtIndex:0];
// Create an MKPlacemark and add it to the mapView
place = [[MKPlacemark alloc] initWithPlacemark:topResult];
[self.mapView addAnnotation:place];
}
if (error) {
NSLog(@"Error: %@", [error localizedDescription]);
}
}];
NSLog(@"%@", [place description]);
return place;
}
當我運行我的代碼時,MKPlacemark地點確實會添加到地圖中。但是,如果我記錄該值,它是NULL。我認爲這可能是因爲該塊沒有立即執行正確的?所以我的NSLog可能會先執行,然後運行completionHandler。但是,如何從此方法返回MKPlacemark,以便在代碼中的其他位置使用該值?謝謝。
你'place'變量可以是零返回的地標使您永遠不會輸入if語句。你有沒有在if語句中設置斷點並確保它執行? –