объект класса, переданный в методе делегата, становится «неинициализированным» в Mac Catalyst

объект, переданный в методе делегата, становится неинициализированным в классе, где реализован протокол. но тот же объект имеет действительный адрес в классе, откуда был вызван делегат. Это происходит только в maccatalyst, тот же код отлично работает в iOS и iPadOS.

Декларация протокола

 protocol ASPatientSearchDelegate: class {
    func moveToPaitentProfileScreen(patient: ASCardEntity)
}

Объявление переменной делегата

    weak var delegate: ASPatientSearchDelegate? = nil

Вызов делегата

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            let patient = self.searchResults[indexPath.row]

                self.delegate?.moveToPaitentProfileScreen(patient: patient)
}

Реализация метода

extension ASAppointmentViewController: ASPatientSearchDelegate {
        func moveToPaitentProfileScreen(patient: ASCardEntity) {
    
            guard let json = patient.details as? JSON else { return }
    }
}

Делегат, назначенный в ASAppointmentViewController

   @IBAction func searchButtonAction(_ sender: UIButton) {

        let searchViewController = ASPatientSearchViewController(nibName: ASPatientSearchViewController.className, bundle: nil)

        searchViewController.popoverPresentationController?.delegate = self
        searchViewController.modelController.delegate = self
}

Используемый класс

class ASCardEntity: NSObject {
    var details: Any?
}

person Dattatray Deokar    schedule 12.01.2021    source источник


Ответы (1)


Это была проблема области действия экземпляра. Я объявил переменную экземпляра ASPatientSearchViewController для области класса

Объявление переменной экземпляра

class ASAppointmentViewController: ASBaseViewController {
    var searchViewController: ASPatientSearchViewController?
}

Я изменил код ниже

@IBAction func searchButtonAction(_ sender: UIButton) {

        let searchViewController = ASPatientSearchViewController(nibName: ASPatientSearchViewController.className, bundle: nil)

        searchViewController.popoverPresentationController?.delegate = self
        searchViewController.modelController.delegate = self
}

To

if self.searchViewController == nil {
        self.searchViewController = ASPatientSearchViewController(nibName: ASPatientSearchViewController.className, bundle: nil)
        
    }
    self.searchViewController.popoverPresentationController?.delegate = self
    self.searchViewController.modelController.delegate = self
person Dattatray Deokar    schedule 13.01.2021