首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用SwiftyDropbox方法时的NSURLErrorDomain代码-999

调用SwiftyDropbox方法时的NSURLErrorDomain代码-999
EN

Stack Overflow用户
提问于 2016-11-10 05:34:37
回答 1查看 568关注 0票数 2

我已经集成了Dropbox接口V2,权限为“应用文件夹”。

使用curl的调用成功:

代码语言:javascript
复制
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
  --header 'Authorization: Bearer vSBSoEs...............' \
  --header 'Content-Type: application/json' \
  --data '{"path":""}'

但是,使用最新的swift api调用失败,并显示以下错误:

代码语言:javascript
复制
Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLKey=https://api.dropbox.com/2/files/list_folder, NSLocalizedDescription=cancelled, NSErrorFailingURLStringKey=https://api.dropbox.com/2/files/list_folder}

我已经按照以下步骤合并了API,并使用下面的代码调用客户端:

代码语言:javascript
复制
func authDropbox() -> DropboxClient {
    let client = DropboxClient(accessToken: DROPBOX_TOKEN)

    return client
}

enum DropBoxListResult {
    case Files(Array<Files.Metadata>)
    case Error(String)
}

enum DropBoxResult {
    case Result(Files.FileMetadata)
    case Error(Error)
    case PathError
}

func listDropbox(name:String, result: @escaping ((DropBoxListResult) -> Void))
{
    Log.info("List:", name)

    let client = authDropbox()

    client.files.listFolder(path: name).response { response, error in

        if let r = response {
            Log.info(response)
            result(DropBoxListResult.Files(r.entries))
        } else if let error = error {
            Log.error(error)
            result(DropBoxListResult.Error(String(describing: error)))
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-01-19 23:17:48

我也遇到了同样的问题,并从https://www.dropboxforum.com/t5/API-support/999-quot-cancelled-quot-Error/td-p/192322找到了解决方案

问题是当收到响应时,client的作用域超出了作用域。在您的示例中,将client存储在函数listDropbox中,该函数在接收到响应时超出范围。

解决方案是将client对象作为变量存储在类中,该类在收到响应后不会超出范围。

代码语言:javascript
复制
class DropboxApi : NSObject {

    let client: DropboxClient = DropboxClient(accessToken: DROPBOX_TOKEN)

    enum DropBoxListResult {
        case Files(Array<Files.Metadata>)
        case Error(String)
    }

    enum DropBoxResult {
        case Result(Files.FileMetadata)
        case Error(Error)
        case PathError
    }

    func listDropbox(name:String, result: @escaping ((DropBoxListResult) -> Void))
    {
        Log.info("List:", name)

        client.files.listFolder(path: name).response { response, error in

            if let r = response {
                Log.info(response)
                result(DropBoxListResult.Files(r.entries))
            } else if let error = error {
                Log.error(error)
                result(DropBoxListResult.Error(String(describing: error)))
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40516402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档