Так что я пытаюсь извлечь файлы и папки с помощью Google Drive API.IOS API GoogleDrive - получить все файлы во вложенных папках с одним исполнением
- (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);
}];
}
выше функция работает нормально, но я не хочу использовать рекурсивный цикл, чтобы получить все файлы в подпапках. Есть ли способ получить все файлы в оригинале и вложенных папках только с одним исполнением?
Причина, по которой я это делаю, хочу сравнить список удаленных файлов с локальным списком файлов, чтобы удалить ненужные локальные файлы перед загрузкой файлов с диска. И использование блоков executeQuery:completionHandler:^{}
не дает мне возможности успешно реализовать серийные исполнения. Методы внутри блоков всегда выполняются позже.
Хотя эта ссылка может ответить на этот вопрос, то лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Marusyk
Я действительно читал этот урок снова и снова много раз, прежде чем публиковать свой вопрос. – Tim
Можете ли вы проверить ответ, который я повторно отправил повторно. Пожалуйста, дайте мне необходимую помощь. Я могу шаг за шагом пройти. –