Поток 1 EXC_BAD_ACCESS (код = 2, адрес = 0x7ffeeb1aeff8)

Я пытаюсь изучить VIPER. Я следовал этому руководству: Учебное пособие по VIPER< /а>. У меня есть Interactor и Presenter.

class PPresenter: ViewToPresenterProtocol {

    var view: PresenterToViewProtocol?  

    var router: PresenterToRouterProtocol? = PRouter()

    var interactor: PresenterToInteractorProtocol? = PInteractor()


    func initiateFetch() {
        interactor?.fetchMatches()
    }

    func showMatchScreen(navigationC: UIViewController) {
        router?.pushToMatchDetailScreen(navigationC: navigationC)
    }
}

extension PPresenter: InteractorToPresenterProtocol {
    func matchFetched(match: MatchDetails?, banner: Banner?) {
        print(match!)

        print(banner!)
    }

    func matchFetchError() {
        //TODO
    }
}


class PInteractor: PresenterToInteractorProtocol {

    var presenter: InteractorToPresenterProtocol? = PPresenter()

    var live: Live?

    var upcoming: Upcoming?

    var banners: Banner?

    func fetchMatches() {
        let parameters = ["api_token" : Constants.USER_INFO["api_token"].rawValue,"player_id" : Constants.USER_INFO["player_id"].rawValue]

        ServiceHelper.sharedInstance.sendRequest(path: "get-predictor", params: parameters, showSpinner: true) { (response, error) in

            if let error = error {
                print("Unable to fetch match listing",error.localizedDescription)

                return
            } else {
                guard let obj = try? JSONDecoder().decode(MatchDetails.self, from: response.rawData()) else { self.presenter?.matchFetchError(); return }

                guard let bannerObj = try? JSONDecoder().decode(Banner.self,from: response.rawData()) else {self.presenter?.matchFetchError(); return }

                self.presenter?.matchFetched(match: obj, banner: bannerObj)
            }
        }
    }
}

Теперь, что здесь происходит, я заставляю маршрутизатор работать, представление приходит, оно вызывает презентатора, презентатор вызывает интерактор, интерактор успешно вызывает API и получает данные, и теперь пришло время вернуть данные, полученные от Interactor к Presenter и здесь он постоянно выдает эту ошибку. И я понятия не имею, почему кто-то может помочь?


person Rob13    schedule 27.11.2018    source источник
comment
Какая строка кода выдает эту ошибку?   -  person Dávid Pásztor    schedule 27.11.2018
comment
presenter в классе PInteractor   -  person Rob13    schedule 27.11.2018


Ответы (1)


Я думаю, что у вас есть циклический вызов, возможно, ваш интерактор не полностью инициализирован, и тогда вы хотите получить от него данные, а затем вы получили «Ошибка неправильного доступа».

person Community    schedule 27.11.2018
comment
Ты понял что я сказал? Я имею в виду, что у вас есть две вещи, например, A и B, вы пытаетесь вычислить A и из-за того, что вы используете B, но из-за ошибки, при вычислении B вы ссылаетесь на значение A, вы видите здесь цикл? попробуйте найти такую ​​закономерность и решить ее. в дайджесте я имею в виду, что A зависит от B, а B зависит от A, и эта ошибка плохого доступа часто является причиной этой ошибки. - person ; 28.11.2018