Also versuche ich, Dateien und Ordner mit Google Drive API zu holen.IOS GoogleDrive API - alle Dateien in Unterordnern mit 1 Ausführung erhalten
- (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);
}];
}
Die obige Funktion funktioniert gut, aber ich will nicht rekursive Schleife verwenden, um alle Dateien in Unterordner zu erhalten. Gibt es eine Möglichkeit, alle Dateien im Original und seinen Unterordnern mit nur einer Ausführung zu erhalten?
Der Grund, warum ich das aufbringe, ist, dass ich die Liste der entfernten Dateien mit der lokalen Dateiliste vergleichen möchte, um unnötige lokale Dateien vor dem Herunterladen der Laufwerksdateien zu löschen. Und mit executeQuery:completionHandler:^{}
Blöcke gibt mir keine Möglichkeit, serielle Ausführungen erfolgreich zu implementieren. Die Methoden innerhalb von Blöcken werden immer später ausgeführt.
Während dieser Link, um die Frage beantworten kann, ist es besser ist, die die wesentlichen Teile der Antwort auf gehören hier und stellen Sie den Link als Referenz zur Verfügung. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. – Marusyk
Ich habe dieses Tutorial tatsächlich immer wieder gelesen, bevor ich meine Frage gestellt habe. – Tim
Mögen Sie die Antwort, die ich erneut gepostet habe, auschecken. Bitte lassen Sie mich detaillierte Hilfe benötigen. Ich kann dich Schritt für Schritt durchgehen. –