2014-04-11 2 views
0

Google Drive iOS SDK을 사용하고 있으며 폴더 내용 목록을 작성하려고 시도했습니다. 여기에는 폴더 상위 폴더 하위 폴더 & 하위 폴더가 포함됩니다.진행하기 전에 모든 completionHandler 블록을 완료하는 방법?

Google 드라이브 iOS SDK는 충분히 간단하지만 아래 샘플 코드가 주어지면 계속 진행하기 전에 completionHandler 블록을 완료 할 때까지 "queryForFilesGetWithFileId"기다리려면 어떻게해야하나요?

addFolderChildren은 하위 폴더 &을 추가하고보기를 새로 고치기 때문에 분명히 마지막으로 수행해야하는 이유가 있습니다.

GTLQueryDrive *query = [GTLQueryDrive queryForParentsListWithFileId:folderId]; 
[self.driveService executeQuery:query 
       completionHandler:^(GTLServiceTicket *ticket, 
            GTLDriveParentList *parents, 
            NSError *error) 
{ 
    if (error == nil) 
    { 
     for (GTLDriveParentReference *parent in parents) 
     { 
      if ([parent.isRoot intValue] == 1) 
      { 
       // add folder root -> "My Drive" 
      } 
      else 
      { 
       GTLQueryDrive *query = [GTLQueryDrive queryForFilesGetWithFileId:parent.identifier]; 
       [self.driveService executeQuery:query 
           completionHandler:^(GTLServiceTicket *ticket, 
                GTLDriveFile *file, 
                NSError *error) 
        { 
         if (error == nil) 
         { 
          // add folder parent -> file.title 
         } 
         else 
         { 
          [self handleFailed:error]; 
         } 
        }]; 
      } 
     } 
     // add folder children 
     // how do we wait here until all above queryForFilesGetWithFileId completionhandler blocks are done? 
     [self addFolderChildren:folderId]; 
    } 
    else 
    { 
     [self handleFailed:error]; 
    } 
}]; 
+0

부모 수에 대한 색인을 유지하고 완료시 1을 줄일 수 있습니다. 그런 다음 0에 이르면 사용자 UI를 업데이트 할 수 있습니다. – BoranA

+0

감사합니다. @BoranA, NSOperation/Queue, GCD 등을 세련된 솔루션으로 길들일 수있을 때까지 멋진 해결 방법을 제공합니다. – pete7au

+0

좋아,이게 더 우아한 것. NSOperation을 서브 클래스 화하여 완료 블록에 대한 특성을 작성하십시오. 작업 대기열을 만들고 maxconcurrency를 1로 설정하고 작업을 대기열에 추가합니다. FIFO 순서에 대해 확실하게하려면 큐의 우선 순위 또는 종속성을 설정해야합니다. – BoranA

답변

0

당신은 너무 당신의 완료 핸들러에서 할 다음이

같은
@protocol MeuDelegate <NSObject> 
@optional 

-(void) meuEditingDone:(Meu*) meu; 

@end 


@interface EditMeu : MeuBasicViewController { 

    id <MeuDelegate> delegate; 
} 


@property (retain) id delegate; 

@end 

을 위해하고하는 .m 파일에

@synthesize delegate; 

호출이 방법을 @protocol을 사용할 수 있습니다 거기에서 양식을 진행할 수 있습니다.

관련 문제