2

逆ジオコードを使用しようとしていますが、関数が実行されておらず、その理由がよくわかりません..

ここに私のコードを添付しました。ご協力ありがとうございました

//-- reverse geocode, converting from point to address 
- (BNRMapPoint *)geocodeLocation:(CLLocation *)location title:(NSString *)title

{
    if(!geocoder)
    {
        geocoder = [[CLGeocoder alloc] init];
    }

    __block BNRMapPoint * annotation;

    [self.geocoder reverseGeocodeLocation:location completionHandler: 
     ^(NSArray * placeMarks, NSError * errors)
     {
         NSLog(@"in block code");
         if([placeMarks count] > 0)
         {
             NSLog(@"%@", [placeMarks objectAtIndex:0]);
             annotation = [[BNRMapPoint alloc] initWithCoordinate:location.coordinate title:title
                                                    placeMark:[placeMarks objectAtIndex:0]];
             NSLog(@"%@", annotation.placeMark.name);
         }
         else
         {
             NSLog(@"failed!!");
         }

     }];

    return annotation;
}

コンソールに何も出力されていないので、ブロックコードに入っていないと思いました。しかし、なぜそれが入らないのか、私は本当に混乱しています。ご協力ありがとうございました

4

2 に答える 2

1

NSLogに渡されたブロックで に問題があったことを覚えているようですreverseGeocodeLocation。ジオコーダーは、ブロックと同様に別のスレッドで実行されると思います。(私がそれについて間違っていれば、誰かが私を訂正してくれると確信しています)。私の場合、ブロックコードでも UIAlertView が動作したと思うので、そちらを試してみてはいかがでしょうか...

動作しているアプリに対してあなたのコードをreverseGeocodeLocation確認しましたが、コードに問題はありません。唯一の違いはif (![geocoder isGeocoding])...、reverseGeocode を実行する前にチェックを行うことです。これは、geoCoder の呼び出しがスタックしないようにするためです。これは、コードの呼び出し方法によっては、アプリでは不可能な場合があります。

于 2012-05-14T17:52:26.207 に答える
0

おそらくself.geocoder = nilですか?

交換

if(!geocoder)
{
    geocoder = [[CLGeocoder alloc] init];
}

if(!self.geocoder)
{
    self.geocoder = [[CLGeocoder alloc] init];
}
于 2012-05-14T17:47:44.490 に答える