объект, переданный в методе делегата, становится неинициализированным в классе, где реализован протокол. но тот же объект имеет действительный адрес в классе, откуда был вызван делегат. Это происходит только в 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?
}