Innerhalb der folgenden Funktion habe ich einen Block verwendet. Aber wenn ich diese Funktion aufrufe, wird sie zurückgegeben, noch bevor der Block ausgeführt wird. Ich verstehe, dass Block inturn die Threads verwendet und separat ausführt, so dass die Funktion nicht darauf wartet, dass sie zurückkehrt. Aber, gibt es eine andere Möglichkeit, die Funktionsausführung warten zu lassen, oder eine andere Möglichkeit, um die Funktionalität dieses Blocks zu erreichen, ohne den Block selbst zu benutzen?Wie mache ich einen Funktionsaufruf in IOS zu warten, bis der Block in dieser Funktion vollständig ausgeführt wird?
-(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;
}
nur als Notiz. Es gibt einen Grund, dass postalCode ein NSString in CLPlacemark ist. Postleitzahlen können mit einer 0 beginnen! –
oh, und '(int) placemark.postalCode' konvertiert diesen NSString nicht in einen int ;-) –