使用ObjectiveDropboxOfficial SDK调用异步问题

时间:2016-09-07 00:36:45

标签: swift dropbox-api

我遇到的问题是应该从dropbox返回加密文件的函数,而是返回我初始化的空字典以接收数据。

我几乎可以肯定这是一个竞争条件问题,因为必须对Dropbox API进行异步调用,但到目前为止我一直无法使用GCD解决问题。任何帮助都将非常感激:

func loadDropboxAccounts() {

    let retreiveDataGroup = dispatch_group_create()
    var dictionary = [String:String]()

    dispatch_group_enter(retreiveDataGroup)

    if DropboxClientsManager.authorizedClient() == nil {
        DropboxClientsManager.authorizeFromController(UIApplication.sharedApplication(), controller: self, openURL: {(url: NSURL) -> Void in
            UIApplication.sharedApplication().openURL(url)
            }, browserAuth: true)
    }

    if let client = DropboxClientsManager.authorizedClient() {

        client.filesRoutes.downloadData("/example/example.txt").response({(result: AnyObject?, routeError: AnyObject?, error: DBError?, fileContents: NSData) -> Void in
            if (fileContents.length != 0) {
                let cipherTextData = fileContents
                let plainTextByteArray = CryptoHelper.accountDecrypt(cipherTextData, fileName: "vault")
                let plainTextString = plainTextByteArray.reduce("") { $0 + String(UnicodeScalar($1)) }
                let plainTextData = dataFromByteArray(plainTextByteArray)
                do {
                    try dictionary = NSJSONSerialization.JSONObjectWithData(plainTextData, options: []) as! [String:String]
                    for (key, value) in dictionary {
                        let t = dictionary[key]
                        print(t)
                    }
                } catch let error as NSError{
                    print("loadAccountInfo:", error)
                }
            } else {
                print("\(routeError)\n\(error)\n")
            }
        }).progress({(bytesDownloaded: Int64, totalBytesDownloaded: Int64, totalBytesExpectedToDownload: Int64) -> Void in
            print("\(bytesDownloaded)\n\(totalBytesDownloaded)\n\(totalBytesExpectedToDownload)\n")
        })
    }

    dispatch_group_notify(retreiveDataGroup, dispatch_get_main_queue()) {
        return dictionary
    }
}

仅供参考,这是我在项目中使用的pod:

https://github.com/dropbox/dropbox-sdk-obj-c

0 个答案:

没有答案