GoogleドライブAPIを使用してファイルとフォルダを取得しようとしています。IOS GoogleDrive API - 1回の実行でサブフォルダ内のすべてのファイルを取得する
- (void)fetchFilesFrom:(NSString *)folderID remoteFolderPath:(NSString *)folderPath {
GTLQueryDrive *query = [GTLQueryDrive queryForFilesList];
query.q = [NSString stringWithFormat:@"'%@' IN parents", folderID]; // get all files and folders under a parent folder
query.fields = @"nextPageToken, files(id, name, mimeType, modifiedTime)"; // get files' and folders' name and id only
[self.serviceDrive executeQuery:query
completionHandler:^(GTLServiceTicket *ticket,
GTLDriveFileList *fileList,
NSError *error) {
if (error == nil) {
for (GTLDriveFile *file in fileList.files) {
if ([file.mimeType containsString:@"vnd.google-apps.folder"]) { // folder not file
NSString *subFolderPath = [NSString stringWithFormat:@"%@/%@", folderPath, file.name];
[self.driveDict setValue:file forKey:subFolderPath];
// Create the folder locally if not existing
[DocumentHandler checkToCreateDir:subFolderPath];
// Fetch files in a subfolder
[self fetchFilesFrom:file.identifier remoteFolderPath:subFolderPath];
}else if(![file.mimeType containsString:@"vnd.google-apps."]) {
// Ignore other google files like speadsheet... as they are undownloadable
NSString *filePath = [NSString stringWithFormat:@"%@/%@", folderPath, file.name];
[self.driveDict setValue:file forKey:filePath];
}
}
/* If possible, I want to have the full driveDict here in order to compare. */
} else NSLog(@"An error occurred: %@", error);
}];
}
上記の機能が正常に動作しているが、私はサブフォルダ内のすべてのファイルを取得するには再帰ループを使用する必要はありません。元のファイルとそのサブフォルダ内のすべてのファイルを1回だけ実行する方法はありますか?
私は、ドライブファイルをダウンロードする前に、不要なローカルファイルを削除するために、ローカルファイルリストとリモートファイルのリストを比較したいと考えています。 executeQuery:completionHandler:^{}
ブロックを使用すると、シリアル実行を正常に実装する方法が得られません。ブロック内のメソッドは、後で常に実行されます。詳しくは下記詳細な手順については
を使用することができます参照のためのリンクを提供する。リンクされたページが変更された場合、リンクのみの回答は無効になります。 – Marusyk
私は実際にこのチュートリアルを何度も何度も読んでから質問を投稿しました。 – Tim
もう一度転記した回答をチェックしてください。詳細なヘルプが必要な場合はお知らせください。私はあなたを歩いていくことができます。 –