Какой метод вызывается при переходе от Presented ViewController к предыдущему ViewController в swift - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть вопрос, я работаю над приложением, в котором я представил ViewController(FilterVC) из моего предыдущего ViewController(ItemsVC). Я сохранил данные фильтра в моем методе делегата, как это

protocol FilterVCDelegate: class {
func didSelectedFilters(_ sender: FilterVC, with selectedFilters: [String:Any])
}

и по нажатию кнопки я успешно передал данные в мой предыдущий ItemVC, например: -

@IBAction func applyButtonAction(_ sender: UIButton) {
    printD(selectedFilters)
    self.delegate?.didSelectedFilters(self, with: self.selectedFilters)
    self.dismiss(animated: true, completion: nil)
}

ItemVC: -

func didSelectedFilters(_ sender: FilterVC, with selectedFilters: [String : Any]) {
    self.currentFilters = selectedFilters
    printD("selectedFilters \(currentFilters)") // successfully get data from previous vc
}

и здесь вызывается метод API: -

func searchFromLatestRelease() {

  //  let param: [String:Any] = ["page": pageNo, "search_term": forSearch, "order_by": "date", "token": commonClass.sharedInstance.userToken ?? ""]

    let param: [String:Any] = ["price_range": currentFilters["price"] as? [String] as Any, "page": "0", "is_rating": currentFilters["Product Rating"] as? [String] as Any]
    printD("param: \(param)")
    Alamofire.request(Constants.API.url("search"), method: .post, parameters: param, encoding: URLEncoding.httpBody, headers: nil).responseJSON {
        (response:DataResponse<Any>) in

        guard let json = response.result.value as? [String:Any] else {return}
        printD(json)

        guard let status = json["status"] as? Int else {return}
        printD(status)

        if status == 1 {

            if self.pageNo == 0 { self.sneakers = [] }
            guard let data = json["data"] as? [[String:Any]] else { return}

            printD(data)
            for dic in data {
                self.sneakers.append(sneakerModel(response: dic))
            }

            self.reloadData()

        }
        else {
            commonClass.sharedInstance.showErrorMessage(json["msg"] as? String ?? "Server error. Please try again later.")
        }
    }
}

Но это не сработает, В назвал его в ViewWillAppear и ViewDidLoad. Теперь мне нужно использовать этот файлер в качестве параметра для вызова API . обновить данные и успешно отобразить отфильтрованные элементы на ItemsVC. В ViewController LifeCycle есть 8 ViewControllers, но я не знаю, что используется для обновления ItemVC для отображения отфильтрованных данных. Пожалуйста, помогите?

Здесь я получаю свой currentFilter в консоли следующим образом: -

selectedFilters ["Product Rating": ["5", "4", "3", "2", "1"], "Price": ["$00.00 - $200.00", "$200.00 - $400.00", "$600.00 - $800.00", "$800.00 - $1000.00", "$1000.00 AND OVER"]]

(lldb)

1 Ответ

0 голосов
/ 03 ноября 2018

viewDidLoad вызывается один раз при запуске vc, ViewWillAppear / viewDidAppear вызывается после отклонения модели, вам нужно

func didSelectedFilters(_ selectedFilters: [String : Any]) {
    self.currentFilters = selectedFilters
    self.searchFromLatestRelease()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...