Google Drive API(GTL) - 按顺序创建多个文件夹路径?

时间:2015-06-14 22:21:41

标签: ios objective-c swift google-drive-api google-api-objc-client

我使用Google APIs Client Library for Objective-C(GTL)访问Google Drive API

根据它的Introduction to the Google APIs Client Library for Objective-C

  

服务的查询执行本质上是异步的。

这意味着当您尝试创建类似root/a/b/c的路径时,在创建文件夹b之前,您必须:

  1. 确保已创建a,如果没有,请在b尝试检查parentRef之前创建id

  2. 了解文件夹a的{​​{1}},以便您可以在其中创建b

  3. 同样适用于c

    我使用以下内容在已知的父文件夹ID中按名称获取文件夹的id

        // Get parentID by name "parent".
    
        let query = GTLQueryDrive.queryForChildrenListWithFolderId(parentID)
        query.q = "mimeType='application/vnd.google-apps.folder' and '\(parentID)' in parents and trashed=false and title='\(name)'"
    
        query.maxResults = 1
    
        GTLFileTicket = GTLDriveService.executeQuery(
            query,
            completionHandler: {(
                ticket:         GTLServiceTicket!,
                object:         AnyObject!,
                error:          NSError!) -> Void in
    
                // Callback
                self.GTLFileTicket = nil
                if error == nil {
                    // Get the id from the object. If nil make another query to create a folder named "name" within folder "parentID".
                } else {
                    // error handles here.
                }
        })
    

    在项目的其他部分,我在for循环中调用了上述方法:

    var parent = "root"
    for item in array {
        createFolderIfNotExisted(item, parent: parent)
        parent = item
    }
    

    显然,它会失败并最终只创建第一个文件夹,因为第二个查询在第一个查询完成之前就开始了。我google了一下,但没有找到一种方法来改变同步电话。 (我看到Java API分支可以有.await()?)

    有没有办法确保可以按顺序执行调用?

1 个答案:

答案 0 :(得分:0)

避免使用同步for循环。 createFolder函数应该在完成后回调;该回调应该开始下一个循环迭代。