使用委托或通知?在委托示例中,标签为nil

时间:2016-01-28 09:59:40

标签: swift null notifications delegates

我找到了很多关于代表与通知的内容。但我真的不明白其中的差异。

在我的项目中,我有一个在后台工作并更新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。

我想了解在哪些情况下我使用委托或通知。

谢谢

0 个答案:

没有答案