[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;
そしてそれをブロックで呼び出します。試してみましたが、この参照は常に nil です。ところで、なぜこれは iOS5 でのみ発生するのでしょうか? (iOS 6では問題ありません)