Значение типа 'UIViewController' не имеет члена 'newExerciseDelegate' - PullRequest
0 голосов
/ 07 октября 2018

Я искал решение этой проблемы, даже пытался следовать нескольким учебникам, чтобы попытаться решить эту проблему, но по какой-то причине я столкнулся с той же проблемой.Я пытаюсь передать пользовательский объект другому контроллеру представления, но каждый раз, когда я пытаюсь, я получаю ошибку "Значение типа 'UIViewController' не имеет члена 'newExerciseDelegate'"

Мой делегат:

protocol exerciseDelegate {
func savedExercise(newExercise: Exercise)

}

мой отправляющий VC использует следующий код:

var newExerciseDelegate: exerciseDelegate!
.
.
.
@IBAction func saveExerciseWasPressed(_ sender: UIButton) {
    if (checkFields() == true){
        newExercise = Exercise(name: exerciseNameField.text!, weight: Int32(weightField.text!)!, reps: Int32(numberOfRepsField.text!)!, sets: Int32(numberOfSetsField.text!)!, muscleGroupFocus: .cardio)
        newExerciseDelegate.savedExercise(newExercise: newExercise)
        dismiss(animated: false, completion: nil)
    }
}

Мой принимающий VC использует следующий код:

    @IBAction func addExerciseBtnWasPressed(_ sender: Any) {
    guard let newExerciseVC = storyboard?.instantiateViewController(withIdentifier: "NewExerciseVC") else { return }
    newExerciseVC.newExerciseDelegate = self // error present on this line
    presentDetail(newExerciseVC)
}

I'mКонечно, это глупая ошибка, но я ее не вижу.Любая помощь приветствуется, спасибо.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Вы должны указать, к какому классу это относится. После того, как код узнает, какой класс это на самом деле, вы можете получить доступ к его общедоступным объектам, методам, переменным и т. Д.

@IBAction func addExerciseBtnWasPressed(_ sender: Any) {
    guard let newExerciseVC = storyboard?.instantiateViewController(withIdentifier: "NewExerciseVC") as? NewExerciseViewController else { return }
    newExerciseVC.newExerciseDelegate = self
    presentDetail(newExerciseVC)
}
0 голосов
/ 07 октября 2018

Вы должны понизить экземпляр созданного контроллера представления до своего пользовательского класса контроллера представления:

guard let newExerciseVC = storyboard?.instantiateViewController(withIdentifier: "NewExerciseVC") as? YourViewControllerClass else { return }
newExerciseVC.newExerciseDelegate = self

Также вы должны использовать заглавную букву E для имени вашего протокола.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...