Alamofire从Web服务获取数据的问题

时间:2015-12-08 16:27:44

标签: ios swift2 alamofire

您好

我正在尝试使用Alamofire库来访问Rest API,我遇到的问题如下:

我有以下方法:

func LoadDevices() ->Void{
    dispatch_async(dispatch_get_global_queue(priority, 0)) {
        // do some task
        do{
            try self.devices = self.manager.GetDevices(self.identity?.IdentityUser, password: self.identity?.IdentityPassword)!
            let lastDeviceConnected = self.manager.RetrieveSharedLastDeviceConnected()
            if(self.devices.count > 0 && lastDeviceConnected == nil){
                self.manager.SaveSharedLastDeviceConnected(self.devices[0].DeviceNumber!)
                self.manager.SaveSharedLastDeviceConnectedObject(self.devices[0])
                self.deviceData = try self.manager.GetDeviceData(self.identity?.IdentityUser!, password: self.identity?.IdentityPassword!, deviceNumber: self.devices[0].DeviceNumber!)
                if(self.deviceData != nil){
                    self.manager.SaveSharedDeviceDataJson(DeviceData.DeviceDataToJson(self.deviceData!))

                }
            }
        }catch{
            self.devices = [Device]()
        }
        dispatch_async(dispatch_get_main_queue()) {
            self.tableView.reloadData()
        }
    }
}

在这个方法中我调用了一个方法“GetDevices”,这个方法有以下代码:

func GetDevices(user: String?, password: String?) ->[Device]?{
    let myIdentity = RetrieveSharedIdentityObject()
    let url = "https://" + (myIdentity?.ServerAccount)! + "/account/account/account/" + (myIdentity?.IdentityAccountNumber)! + "/devices"
    var devices : [Device]?
    let headers = [
        "MMSSession": myIdentity!.ServerAccountToken!,
    ]
    Alamofire.request(.GET, url, headers: headers)
        .responseJSON { response in
            print(response.data)
            let json = JSON(data: response.data!)
            print(json)
            let device = Device()
            devices?.append(device)

    }
    return devices
}

正如您所看到的,我正在尝试使用Alamofire访问API,但是当我执行此操作时,我没有打印数据,而且我得到了一个例外,因为我得到了一个零值第一种方法。

请对此提供任何帮助,可能有人知道为什么Alamofire代码不起作用。

1 个答案:

答案 0 :(得分:2)

接收数据的回调是异步调用的。因此,您需要更新回调中的日期,而不是在调用之后(在收到数据之前会立即返回)。