gpt4 book ai didi

swift - 使用协议(protocol)发送数据

转载 作者:行者123 更新时间:2023-11-28 05:51:16 24 4
gpt4 key购买 nike

我在使用协议(protocol)将数据发送回之前的 Controller 时遇到问题。我研究了 SO 问题和指南,但出于某种原因,我的数据没有传回。

在我的第二堂课中,我创建了数据,这些数据稍后会被发送回第一个类:

protocol ImageEditorDelegate {
func sendImage(image: UIImage, id: String)
}

class PhotoEditorViewController: UIViewController {

var delegate: ImageEditorDelegate?

override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func didPressSave(_ sender: UIButton) {
delegate?.sendImage(image: finalImage, id: imageThatWasSelected)
self.dismiss(animated: true, completion: nil)
}

}

在我的接收类里,我有:

class NewProductViewController: UIViewController, ImageEditorDelegate { 

var imageEditor: PhotoEditorViewController?

override func viewDidLoad() {
super.viewDidLoad()
imageEditor?.delegate = self
}

func sendImage(image: UIImage, id: String) {
print("Receiving images", image, id)
switch id {
case "1":
selectedImages[1] = image
productImage1.image = image
case "2":
selectedImages[2] = image
productImage2.image = image
case "3":
selectedImages[3] = image
productImage3.image = image
default:
break
}
}
}

但是什么也没有发生,这个函数永远不会被调用。我认为我的代表为零,或者如此,但我该如何解决这个问题?我还有,我正在使用 VIPER 作为具有稍微定制的 segues 的架构,这可能是问题所在吗?我尝试过简单的 segues,但遇到了同样的问题。

我知道这是一个相当简单的问题,但在阅读有关协议(protocol)的文章后,我不明白我做错了什么。

感谢您的帮助!

最佳答案

你的做法是非常错误的。您有两个 View Controller ,它们相互引用属性:

class PhotoEditorViewController: UIViewController { 
var delegate: ImageEditorDelegate?
}
class NewProductViewController: UIViewController, ImageEditorDelegate {
var imageEditor: PhotoEditorViewController?
}

那些不是引用,所以如果你真的让它工作——也就是说,如果你曾经安排过一些东西,使 NewProductViewController 的 imageEditor 是一个 PhotoEditorViewController,它的delegate 是 NewProductViewController — 您将遇到讨厌的保留周期和内存泄漏。

这表明您还没有理解协议(protocol)和委托(delegate)模式。只有 presented view controller 应该有一个 delegate 属性指向 presenter,并且它应该是 weak。呈现器不需要任何指向呈现的 View Controller 的属性,因为它呈现它。

关于swift - 使用协议(protocol)发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52882416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com