임은 블록 변수를 넘기려고하고 편의 편의 초기화 도구에 넣으려고하지만 변수가 null을 반환합니다. 누군가가 내게 올바른 방법을 보여줄 수 있습니까? 감사합니다. 내가 도울 수있는 사람을 사전에 여기 코드는 제대로블록 변수가 블록 외부에서 null을 가져옵니다 - xcode
- (void) retrieveData
{
NSURL *url = [NSURL URLWithString:jsonFile];
NSData *data = [NSData dataWithContentsOfURL:url];
_jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
_salesArray = [[NSMutableArray alloc]init];
for (int i = 0; i < _jsonArray.count; i++) {
NSString *sID = [[_jsonArray objectAtIndex:i] objectForKey:@"id"];
NSString *sName = [[_jsonArray objectAtIndex:i] objectForKey:@"name"];
NSString *sAddress = [[_jsonArray objectAtIndex:i] objectForKey:@"address"];
NSString *sPostcode = [[_jsonArray objectAtIndex:i] objectForKey:@"postcode"];
__block NSString *distance;
CLGeocoder *geocoder = [[CLGeocoder alloc]init];
[geocoder geocodeAddressString:sPostcode completionHandler:^(NSArray *placemarks, NSError *error) {
if (error == nil && placemarks.count > 0) {
CLPlacemark *placemark = [placemarks objectAtIndex:0];
CLLocation *location = placemark.location;
CLLocation *myLocation = self.manager.location;
CLLocationDistance miles = [location distanceFromLocation:myLocation];
//this is the variable i want in my convenience init.
distance = [NSString stringWithFormat:@"%.1f m", (miles/1609.344)];
}
}];
[_salesArray addObject:[[sales alloc] initWithSales:sID andName:sName andAddress:sAddress andPostcode:distance]];
}
[_salesArray sortUsingComparator:
^NSComparisonResult(id obj1, id obj2){
sales *p1 = (sales *)obj1;
sales *p2 = (sales *)obj2;
if (p1.postcode > p2.postcode) {
return (NSComparisonResult)NSOrderedDescending;
}
if (p1.postcode < p2.postcode) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}
];
[self.tableView reloadData];
}
덕분에 내 NSComparison 결과를 수행 한이 완료 :)
이 질문은 많이 묻습니다. 여기에 예제가 있습니다. http://stackoverflow.com/questions/24870458/waiting-for-a-block-to-finish – CrimsonChris