2015-11-10 4 views
-7

Я использую AFNetworks. Я получаю данные с сервера в методе AFNetWorkApi.GetApiCall. Я хочу добавить данные в класс JsonVO, и мне нужен доступ из других классов. Я хочу каждый раз отправлять запрос одному классу и назначать данные классу JsonVO. success блокаЯ получаю пустые данные IOS swift 2.0

class JsonVO { 
     var data: NSDictionary = NSDictionary() 
    } 

class AFNetWorkApi { 
     class func GetApiCall(urlString : NSString , params: NSDictionary)-> JsonVO{ 
      let jsonObject = JsonVO() 
      let manager = AFHTTPRequestOperationManager() 
      manager.requestSerializer = AFJSONRequestSerializer() 
      manager.responseSerializer = AFJSONResponseSerializer() 
      //manager.requestSerializer.setValue("abc", forHTTPHeaderField: "key") 
      manager.GET(urlString as String, parameters: params, success: { (reqOperation :AFHTTPRequestOperation, responseObject : AnyObject) -> Void in 
       // print("Response : \(responseObject)") // Here its printing currectly but i want to get the data in view controller 
       jsonObject.data = responseObject as! NSDictionary 
       // here setting data or appeding data to JsonVO Class 

       }) { (operation :AFHTTPRequestOperation?, error: NSError) -> Void in 
        // print("Error : \(error.localizedDescription)") 
        jsonObject.data = [:] 
      } 
      return jsonObject; 
     } 
    } 

class ViewController: UIViewController { 
     override func viewDidLoad() { 
      super.viewDidLoad() 
      let urlString: NSString = "http://api.kivaws.org/v1/loans/search.json?status=fundraising" 
      print("Data : \((AFNetWorkApi.GetApiCall(urlString, params: [:]) as JsonVO).data)") 

      // here i want to get the datat from the class JsonVo 
     } 
     override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 
      // Dispose of any resources that can be recreated. 
     } 
    } 
+1

Опишите проблему должным образом и поместить сюда код, но не изображение с кодом –

+1

http://stackoverflow.com/help/how-to-ask –

+1

Опубликовать скриншот, чтобы люди не могли «украсть» ваш код? : P Если да, то, к сожалению, существуют инструменты OCR. xD – NSNoob

ответ

0

ваших manager.GET «S является асинхронным, то это означает, что ваш блок будет выполнен по прошествии некоторого времени, когда запрос заканчивается. Но вы возвращаете свой jsonObject синхронно, не устанавливая новое значение, которое вы получите в блоке success. Таким образом, вы можете объявить success блок параметров в методе GetApiCall:

class AFNetWorkApi { 
    class func GetApiCall(urlString : NSString , params: NSDictionary, success: JsonVO -> Void) { 

     let manager = AFHTTPRequestOperationManager() 
     manager.requestSerializer = AFJSONRequestSerializer() 
     manager.responseSerializer = AFJSONResponseSerializer() 
     manager.GET(urlString as String, parameters: params, success: { (reqOperation :AFHTTPRequestOperation, responseObject : AnyObject) -> Void in 

      let jsonObject = JsonVO() 
      jsonObject.data = responseObject as! NSDictionary 
      success(jsonObject) 

      }) { (operation :AFHTTPRequestOperation?, error: NSError) -> Void in 
       // return empty object 
       success(JsonVO()) 
     } 
    } 
} 

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let urlString: NSString = "http://api.kivaws.org/v1/loans/search.json?status=fundraising" 
     AFNetWorkApi.GetApiCall(urlString, params: [:]) { jsonObject in 
      // here you can get the data from the class JsonVo 
      print("Data : \(jsonObject.data)") 
     } 
    } 
} 
+0

Спасибо @imnosove .. Получил. Можете ли вы помочь мне понять быстрый 2.0, у меня есть некоторые сомнения. – Dev

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