обектът на клас, предаден в метода на делегат, става ‹неинициализиран› в 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