Потеря ответа api при изменении делегата

Я столкнулся с проблемой, используя протокол в моем приложении, я создал элемент управления для управления вызовами api и возвращаю ответ контроллеру представления делегата. но моя забота, например:

Я был в ViewController1 и попросил api, чтобы получить профиль администратора, например, и назначить делегат api в self meaning ( APIClient.delegate = self) : ViewController1 получит ответ, потому что он реализовал делегат клиента api, чтобы иметь ответ назад

Теперь перед ответом возвращается get admin profile. я пошел в 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, чтобы быть уверенным, что ответ не потеряется при изменении делегата. Любая идея, как решить его динамически, в фоновом режиме..etc?

1 ответ

  1. Чтобы достичь желаемого, необходимо создать объект объекта APIClientпри каждом вызове API.

    например.

    let objClient = APIClient()
    objClient.delegate = self
    objClient.getAdminProfile(.....
    

    таким образом, ссылка на каждый вызов будет содержаться и вызовы API не будут перекрываться.