Wewnątrz poniższej funkcji użyłem bloku. Ale kiedy wywołuję tę funkcję, jest ona zwracana nawet przed wykonaniem bloku. Zrozumiałem, że Block Inturn używa wątków i wykonuje oddzielnie, aby funkcja nie czekała na powrót. Ale, czy jest jakiś inny sposób, w jaki mógłbym sprawić, aby funkcja czekała, czy jakikolwiek inny sposób na osiągnięcie funkcjonalności tego bloku bez korzystania z samego bloku?Jak wywołać funkcję w ios, aby czekać, aż blok wewnątrz tej funkcji zostanie wykonany całkowicie?
-(int)findCurrentZip
{
CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:[self findCurrentLatitude]
longitude:[self findCurrentLongitude]];
int zipcode;
self.myGeocoder = [[CLGeocoder alloc] init];
[self.myGeocoder
reverseGeocodeLocation:userLocation
completionHandler: (id)^(NSArray *placemarks, NSError *error) {
if (error == nil && [placemarks count] > 0)
{
NSLog(@"Placemarks: %@",placemarks);
CLPlacemark *placemark = [placemarks objectAtIndex:0];
NSLog(@"Country = %@", placemark.country);
NSLog(@"Postal Code = %@", placemark.postalCode);
zipcode = (int)placemark.postalCode;
NSLog(@"Locality = %@", placemark.locality);
NSLog(@"Country%@",[placemarks lastObject]);
}
else if (error == nil && [placemarks count] == 0)
{
NSLog(@"No results were returned.");
}
else if (error != nil)
{
}
}];
return zipcode;
}
tylko jako notatkę. istnieje powód, dla którego PostalCode jest NSString w CLPlacemark. Kody pocztowe można rozpoczynać od 0! –
oh, a '(int) znak_ miejsca_pionowego.postalCode' nie konwertuje tego NSString na int ;-) –