代表更改时丢失api响应

时间:2016-10-03 09:43:34

标签: ios swift delegates

我在我的应用程序中使用协议时遇到问题,我创建了一个控件来管理api调用,并将响应返回给委托视图控制器。但我关注的是例如:

我在ViewController1并请求api获取管理员配置文件,并将api委托分配给自我意义(APIClient.delegate = self):ViewController1将收到响应,因为它实现了api客户端的委托以获得响应回来

现在,在回复get admin个人资料之前。我去了ViewController2并分配了APIClient.delegate = self并在这里请求了另一个api调用。现在获得了get admin profile的响应,但它将被丢弃,因为委托不等于执行请求的ViewController1或者没有实现处理配置文件响应的方法!

以下是我的一些代码:

@objc protocol APIClientDelegate : NSObjectProtocol {
    @objc optional func getAdminProfileFinishedWithResponse(_ dictionary:NSMutableDictionary)
    @objc optional func getAdminProfileFailedWithError(_ error:NSError)
}



@objc class APIClient: APIClientDelegate {

   weak var delegate : APIClientDelegate?


  func getAdminProfile(_ postDictionary:NSMutableDictionary){


        self.get(getUserProfilePath, parameters: postDictionary, progress: nil, success: { (task, response) in

                if self.delegate != nil && self.delegate!.responds(to: #selector(APIClientDelegate.getAdminProfileFinishedWithResponse(_:))){
                    self.delegate!.getAdminProfileFinishedWithResponse!((response as! NSDictionary ).mutableCopy() as! NSMutableDictionary)
                }

        }) { (task, error) in

                if self.delegate != nil && self.delegate!.responds(to: #selector(APIClientDelegate.getAdminProfileFailedWithError(_:))){
                    self.delegate!.getAdminProfileFailedWithError!(error as NSError)
                }

        }
    }
}

如果您明白我的意思,如果ViewController1请求api,请确保如果代理更改,则响应不会丢失。想知道怎么动态地解决它,在后台......等等?

1 个答案:

答案 0 :(得分:0)

为了达到你想要的效果,你每次进行API调用时都会创建一个APIClient对象的对象。

e.g。

let objClient = APIClient()
objClient.delegate = self
objClient.getAdminProfile(.....
通过这种方式,将包含每个调用的引用,并且API调用不会重叠。