![](/img/trans.png)
[英]Swift Error Domain=NSURLErrorDomain Code=-999 “cancelled”
[英]NSURLErrorDomain Code -999 when call SwiftyDropbox method
我已经合并了Dropbox API V2,并获得了“应用文件夹”的许可。
使用curl的调用成功:
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
--header 'Authorization: Bearer vSBSoEs...............' \
--header 'Content-Type: application/json' \
--data '{"path":""}'
但是,使用最新的swift api调用失败,并显示以下信息:
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,并使用它来调用客户端:
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)))
}
}
}
我遇到了同样的问题,并从https://www.dropboxforum.com/t5/API-support/999-quot-cancelled-quot-Error/td-p/192322找到了解决方案
问题是当收到响应时, client
的范围超出范围。 在您的情况下,您将client
存储在函数listDropbox
,该函数在收到响应时超出范围。
解决方案是将client
对象作为变量存储在类中,该类在收到响应后不会超出范围。
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)))
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.