我找到了很多关于代表与通知的内容。但我真的不明白其中的差异。
在我的项目中,我有一个在后台工作并更新UI的类。我已经使用了通知。
现在我创建了一个示例:当我在button1上单击FirstViewController(FVC)时,委托函数启动。当我在button2上单击FVC时,我从FVC跳转到SecondViewController(SVC)。 我可以多次点击button1,有一天我点击第二个按钮。
但SVC中的标签总是零。
FVC:
protocol Test {
func someFunction(someString: String)
}
class FirstViewController: UIViewController {
var secViewDel: SecondViewController = SecondViewController()
//...
@IBAction func clickMe(sender: AnyObject) {
secViewDel.myDelegate = self
secViewDel.someFunction("sendAString")
}
override func viewDidLoad() {
super.viewDidLoad()
//do stuff
}
}
SVC:
class SecondViewController: UIViewController,Test {
var myDelegate:FirstViewController? = nil
func someFunction(someString: String) {
print("\(someString)") //sendAString
if let lblNil = lbl {
lblNil.text = someString
} else {
print("lbl is nil") //lbl ist always nil
}
}
@IBOutlet weak var lbl: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//do stuff
}
}
sendAString
lbl是零
当我使用像here这样的segue时,我确实可以在我的示例中解决我的问题。但我不想总是跳到SVC。
很多人说他们不太喜欢通知。 Here我发现代表通常用于1:1关系的1:1关系和通知。 (我没有找到“官方消息来源” - 有人知道吗?)
我会说在我的例子中它是一个1:1的关系。 FVC可以更新SVC x次。然后有一天用户跳转到SVC并查看实际数据。
在我的项目中,它有点复杂。有一个类在后台运行,并始终从服务器获取新数据。每当新数据到达时,课程都会更新主屏幕。通知它有效。对于委托,我得到了与我的例子中相同的错误:UI元素总是为零。我该如何修复我的例子?
对我而言,这种关系再次是1:1。
我想了解在哪些情况下我使用委托或通知。
谢谢