【问题标题】:NSURLErrorDomain Code -999 when call SwiftyDropbox method调用 SwiftyDropbox 方法时的 NSURLErrorDomain 代码 -999
【发布时间】:2017-03-23 19:40:58
【问题描述】:

我已经合并了 Dropbox API V2,并获得了“App Folder”的许可。

使用 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)))
        }
    }
}

【问题讨论】:

    标签: swift runtime-error nsurlerrordomain swiftydropbox


    【解决方案1】:

    我遇到了同样的问题,从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)))
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-11
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 2017-03-19
      • 2013-12-30
      相关资源
      最近更新 更多