2014年6月2日月曜日

ループ中でのreverseGeocodeLocationはできない模様


assetsを取得して中身全部なめて座標データから地名取得して配列にぶっこみたい。
で、実行すると全部ループ回りきったあとにreverseGeocodeLocationが一回だけ実行される。
(´・ω・`)

基本的にやりたかったことは以下↓

    for (ALAsset* asset in self.photos) {
        
        ALAssetRepresentation *representation = [asset defaultRepresentation];
        NSURL *url = [representation url];
        
        LOG_CURRENT_LINE(@"%@", url);
        
        CLLocation *location = (CLLocation *)[asset valueForProperty:ALAssetPropertyLocation];
        
        // 逆ジオコーディングの開始
        [_geocoder reverseGeocodeLocation:location
                        completionHandler:^(NSArray *placemarks, NSError *error) {
                          
                            LOG_CURRENT_LINE(@"ここがどう頑張っても先頭の一回しか実行されない");
                            
            if (error) {
                
                LOG_CURRENT_LINE(@"%@", error);
                
            } else {
                if (0 < [placemarks count]) {
                    
                    // ログ出力
                    LOG_CURRENT_LINE(@"%@", url);
                    CLPlacemark *p = [placemarks objectAtIndex:0];
                    
                    NSString *country = [p.addressDictionary objectForKey:@"Country"];
                    NSString *state = [p.addressDictionary objectForKey:@"State"];
                    
                    [_stateMuDic setObject:state
                                    forKey:state];
                    
                    LOG_CURRENT_LINE(@"%@", _stateMuDic);
                    
                }else{
                    
                    LOG_CURRENT_LINE(@"(取得できませんでした)");
                }
            }
        }];
        
        cnt++;
    }



途中にdispatch_semaphore_waitとか挟んでむりやり同期する方法もためしたけどうまくいかず。

でstackoverflowで調べてみたらやっぱ同じことしてる人いた。
reverseGeocodeLocation Only Executes Completion Block Once
→ (`・ω・´)短いスパンで呼び出してはダメってAppleのドキュメントにかいてあるよ

・・・だそうな。えええええぇぇぇぇぇぇぇ・・・・・。
げ、原文読むのしんどい。

0 件のコメント:

コメントを投稿