我在使用该[CLGeocoder geocodeAddressString:completionHandler:]
方法对Address string
. 在 iOS 5 上运行的应用程序总是(EXEC_BAD_ACCESS)
在completion handler block
.
- (void)geocodeLocationComponents:(NSDictionary *)location
{
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
NSString *searchString = [self stringFromLocation:location
forStage:self.stage];
[geocoder geocodeAddressString:searchString
completionHandler:^(NSArray *placemarks, NSError *error) {
self.stage++;
if (!error &&
placemarks &&
placemarks.count > 0) {
[self.delegate geocoder:self
didFinishCodingWithPlacemark:[placemarks objectAtIndex:0]];
} else {
...
}
}];
}
寻找解决方案,我发现这是由于在块中调用 self 引起的。提到的解决方案(对于 ARC!)是创建一个弱引用,就像那样
__weak MyClass *blockSaveSelf = self;
并在块中调用它。我试过了,但这个参考总是零。顺便说一句,为什么只有在 iOS5 上运行才会出现这种情况?(iOS 6 没有问题)