2014-05-25 1 views
0

나는 하나의 배열에 FB 사용자의 albumIds를 가지고 있습니다. albumId, 과 같이 다음과 같은 메서드를 호출해야하는 각 앨범의 이미지를 가져 오려고합니다. For 루프, 그래서이 문제는 어떻게For 루프를 완료 호출 핸들러 메서드를 호출하십시오

arrAlbumIds=(11523252,11523245,11523278) 

for (int i=0; i<arrAlbumIds.count; i++) { 



     NSString * graphPath=[NSString stringWithFormat:@"/%@/photos",[arrAlbumIds objectAtIndex:i]]; 

     [FBRequestConnection startWithGraphPath:graphPath 
            parameters:nil 
            HTTPMethod:@"GET" 
           completionHandler:^(
                FBRequestConnection *connection, 
                id result, 
                NSError *error 
               ) { 
            /* handle the result */ 

            NSLog(@"album images:%@",result); 

            FBGraphObject * response=[[FBGraphObject alloc]init]; 
            response=result; 

            NSMutableDictionary * dictImagesData=[[NSMutableDictionary alloc]init]; 
            dictImagesData=response; 


            NSMutableArray * arrImagesData=[[NSMutableArray alloc]init]; 
            arrImagesData=[dictImagesData valueForKey:@"data"]; 


            FBGraphObject * fbGraphImages=[[FBGraphObject alloc]init]; 
            fbGraphImages=[arrImagesData valueForKey:@"images"]; 

            NSDictionary * dictImages=[[NSDictionary alloc]init]; 
            dictImages=fbGraphImages; 

            NSMutableArray * arrImages=[[NSMutableArray alloc]init]; 
            arrImages=[arrImagesData valueForKey:@"images"]; 



            //Get Url of Each Image 
            //self.arrFbAlbumImages=[[NSMutableArray alloc]init]; 

            [arrFacebookAlbumThumbnail addObject:[arrImages valueForKey:@"source"]]; 

            NSLog(@"arrFacebookAlbumThumbnail=%@",arrFacebookAlbumThumbnail); 
           }]; 
} 
For 루프에 완료 핸들러와 메소드를 호출하는 방법을 가르쳐주세요 완료 핸들러가 응답 을 받고 있지 않다 기능 : 나는 모든 앨범 이미지를 원 문제 "graphPath FBRequestConnection startWithGraphPath"를 호출하지 않고 루프를 들어 실행하는 것입니다
+1

당신이 요구하고 정확하게 불분명의 다음 페이스 북의 전화를 호출합니다. 이 코드에는 재귀가 없습니다 – Paulw11

+0

FBRequestConnetion startWithGrapPath : 이 메서드는 for 루프에서 호출되고 있지만 for 루프 실행은 완료 처리기 메서드가 호출되지 않는 이유를 완료 대기자가 아닙니다. – user3673300

+0

이것은 반복입니다. 재귀가 아닙니다. http://en.wikipedia.org/wiki/Recursion_ (computer_science)이 메서드는 네트워크 작업이 시간이 오래 걸리기 때문에 비동기입니다. 완료 처리기는 작업이 완료되었을 때 호출되지만'startWithGraphPath'가 즉시 – Paulw11

답변

0

의견에 따르면 페이스 북 API가 동시 작업을 좋아하지 않는 것처럼 보입니다.

이 코드는 루프의 제거 및 완료 핸들러

int i=0; 

if (arrAlbumIds.count > 1) 
{ 


    NSString * graphPath=[NSString stringWithFormat:@"/%@/photos",[arrAlbumIds objectAtIndex:i]]; 

    void (^completionBlock)(FBRequestConnection *connection,id result,NSError *error)= ^(FBRequestConnection *connection, 
         id result, 
         NSError *error) { 
    NSLog(@"album images:%@",result); 

    FBGraphObject * response=[[FBGraphObject alloc]init]; 
    response=result; 

    NSMutableDictionary * dictImagesData=[[NSMutableDictionary alloc]init]; 
    dictImagesData=response; 


    NSMutableArray * arrImagesData=[[NSMutableArray alloc]init]; 
    arrImagesData=[dictImagesData valueForKey:@"data"]; 


    FBGraphObject * fbGraphImages=[[FBGraphObject alloc]init]; 
    fbGraphImages=[arrImagesData valueForKey:@"images"]; 

    NSDictionary * dictImages=[[NSDictionary alloc]init]; 
    dictImages=fbGraphImages; 

    NSMutableArray * arrImages=[[NSMutableArray alloc]init]; 
    arrImages=[arrImagesData valueForKey:@"images"]; 


    //Get Url of Each Image 
    //self.arrFbAlbumImages=[[NSMutableArray alloc]init]; 

    [arrFacebookAlbumThumbnail addObject:[arrImages valueForKey:@"source"]]; 

    NSLog(@"arrFacebookAlbumThumbnail=%@",arrFacebookAlbumThumbnail); 

    if (++i<arrAlbumIds.count) { 
     NSString * graphPath=[NSString stringWithFormat:@"/%@/photos",[arrAlbumIds objectAtIndex:i]]; 
    [FBRequestConnection startWithGraphPath:graphPath 
            parameters:nil 
            HTTPMethod:@"GET" 
           completionHandler:completionBlock]; 
    } 
    }; 

    [FBRequestConnection startWithGraphPath:graphPath 
            parameters:nil 
            HTTPMethod:@"GET" 
           completionHandler:completionBlock]; 

} 
+0

여전히 나를 위해 작동하지 않습니다 [FBRequestConnection startWithGraphPath : graphPath 매개 변수 : 없음 HTTPMethod : @ "GET" 은 실행되지 않습니다 – user3673300

+0

startWithGraphPath를 호출하기 전에 디스패치 블록에 NSLog를 넣으면 로그에 출력됩니까? – Paulw11

+0

NSlog out fb 완료 처리기가 인쇄되었지만 FB compeletion 처리기 로그가 인쇄되지 않습니다. – user3673300

관련 문제