0

我已经寻找解决此问题的方法,甚至尝试遵循一些教程来尝试解决此问题,但由于某种原因,我最终遇到了同样的问题。我正在尝试将自定义对象传递给不同的视图控制器,但每次尝试时都会收到错误消息“'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)
}

我确定这是一个愚蠢的错误,但我没有看到它。任何帮助表示赞赏,谢谢。

4

3 回答 3

1

您应该指定它是哪个类。在代码知道它实际上是哪个类之后,您就可以访问它的公共对象、方法、变量等。

@IBAction func addExerciseBtnWasPressed(_ sender: Any) {
    guard let newExerciseVC = storyboard?.instantiateViewController(withIdentifier: "NewExerciseVC") as? NewExerciseViewController else { return }
    newExerciseVC.newExerciseDelegate = self
    presentDetail(newExerciseVC)
}
于 2018-10-07T08:32:06.287 回答
0

如果您正在访问在 ViewController 中声明的委托,那么您应该按以下方式调用。

let childOne = self.storyboard?.instantiateViewController(withIdentifier:"WhatsNewViewController")  as? WhatsNewViewController
于 2021-03-16T10:37:17.930 回答
-1

您必须将实例化的视图控制器向下转换为您的自定义视图控制器类:

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

此外,您应该使用大写E作为您的协议名称。

于 2018-10-07T08:30:30.260 回答