【发布时间】:2015-12-15 08:22:16
【问题描述】:
每个人。我编写了这段代码来在 VC 之间传递数据,但我不确定为什么它不起作用。
这是 ViewController1 中的代码:-
import UIKit
import Foundation
let foodDict: [String:String] = [
"Orange": "Fruit",
"Carrot": "Vegetable",
"Pear": "Fruit",
"Spinach": "Vegetable"
]
class ViewController1: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().postNotificationName("SEND_STRING", object: nil, userInfo: foodDict)
}
}
在 ViewController2 中:-
import UIKit
import Foundation
class ViewController2: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "printStringDict:", name: "SEND_STRING", object: nil)
}
func printStringDict(notification: NSNotification) {
print("Got the notification...")
let foodDictFromVC1 = notification.userInfo as! [String:String]
print(foodDictFromVC1)
}
}
VC2 没有得到字典(因为没有打印)。有人可以帮忙吗?提前致谢。
【问题讨论】:
-
控制台中是否正在打印“收到通知...”?在我看来,VC2 没有在 VC1 之前加载,因此观察者还不存在。
-
在调用
ViewController1的viewDidLoad函数时是否存在ViewController2的实例?只有在通知时存在的观察者才会被告知通知。 -
顺便说一句 - 这不是一个真正的好方法。但是如果不知道两个视图控制器之间的关系,就很难确定。
-
没有任何东西被打印到控制台。 VC1 有一个按钮,点击后会连接到 VC2。
-
您应该通过 segue 而不是通知传递数据。通知通常用于让多个对象或它们之间没有链接的对象存在已更改的状态。您编写的用于发送和观察通知的代码是正确的。它只是它出错的顺序。
标签: ios swift nsnotificationcenter nsnotification