2014-10-25 1 views
2

SwiftyJSONhttps://github.com/SwiftyJSON/SwiftyJSON выглядит действительно многообещающим. Однако в инструкциях говорится об интеграции с Alamofire (AFNetworking for Swift). Однако из-за характера текущего проекта он уже использует AFNetworking2 и не может переключиться на Alamofire. Однако у меня возникают проблемы с интеграцией AFNetworking с SwiftyJSON.AFNetworking 2 + SwiftyJSON

Я следующий блок кода, как преобразовать responseObject, который может быть downcasted к NSDictionary, чтобы объект JSON, как это определено в SwiftyJSON? Код ниже не работает.

 let task:NSURLSessionDataTask = AFHTTPSessionManager.GET(
      url, 
      parameters: params, 
      success: { (task: NSURLSessionDataTask!, responseObject: AnyObject!) in 

       dispatch_async(dispatch_get_main_queue(), { 

        // How do I convert responseObject, which can be downcasted to NSDictionary to a JSON object? 
        let data = JSON(data: responseObject) 
        completion(task: task, response: data as JSON!, error: nil) 
       }) 
      }, 
      failure: { (task: NSURLSessionDataTask!, error: NSError!) in 
       dispatch_async(dispatch_get_main_queue(), { 
        completion(task: task, response: nil, error: error) 
       }) 
      } 
     ) 
+0

Спасибо, что спросили об этом. Я думал, что я единственный, у кого проблемы с JSON-анализом в AFNetworking и SwiftyJSON. – botbot

ответ

3

Прежде всего, вам не нужно отправлять в основную очередь. AFNetworking уже вызывает эти блоки в основном потоке.

Инициализатор, который вы используете, ожидает данных, а не объект JSON.

Вы используете этот инициализатор, который ожидает NSData:

let json = JSON(data: dataFromNetworking) 

Вместо этого, вы должны использовать этот инициализатор:

let json = JSON(jsonObject) 

SwiftyJSON будет нормально работать, если вы передадите responseObject здесь.

Другое примечание: этот код не входит в блокировки завершения. В дизайне AFNetworking вы должны создать сериализатор ответов, который обрабатывает ответ сервера. Я рекомендую посмотреть источник на AFJSONResponseSerializer и портировать его, чтобы использовать SwiftyJSON.

+0

Спасибо Аарон. Я удалил блок dispatch_async из 'success' и' failure'. Я также задерживаю вызов 'JSON (object: jsonObject)', и это, похоже, сработало. Благодаря! – Dean

 Смежные вопросы

  • Нет связанных вопросов^_^