2016-11-09 9 views
2

Я включил Dropbox API V2 с разрешения «Папка приложения».NSURLErrorDomain Code -999 при вызове метода SwiftyDropbox

Вызов с помощью завиток succed:

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

Однако, вызов с использованием новейших быстрого апи завершаться:

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

ответ

0

у меня была такая же проблема, и нашел решение от 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))) 
      } 
     } 
    } 
}