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];
}
}];
부모 수에 대한 색인을 유지하고 완료시 1을 줄일 수 있습니다. 그런 다음 0에 이르면 사용자 UI를 업데이트 할 수 있습니다. – BoranA
감사합니다. @BoranA, NSOperation/Queue, GCD 등을 세련된 솔루션으로 길들일 수있을 때까지 멋진 해결 방법을 제공합니다. – pete7au
좋아,이게 더 우아한 것. NSOperation을 서브 클래스 화하여 완료 블록에 대한 특성을 작성하십시오. 작업 대기열을 만들고 maxconcurrency를 1로 설정하고 작업을 대기열에 추가합니다. FIFO 순서에 대해 확실하게하려면 큐의 우선 순위 또는 종속성을 설정해야합니다. – BoranA