Ios 无法在KVO中调用观察者
当我点击文本字段时,我会打开一个带有姓名列表的Ios 无法在KVO中调用观察者,ios,swift,key-value-observing,Ios,Swift,Key Value Observing,当我点击文本字段时,我会打开一个带有姓名列表的表格视图。我使用segue导航到此tableview。一旦从tableview中选择了一个元素,我就在我的viewcontroller中获取它,并使用回调函数获取textfield 这是prepareForSegue函数 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "seguedropdown2&q
表格视图。我使用segue导航到此tableview。一旦从tableview中选择了一个元素,我就在我的viewcontroller中获取它,并使用回调函数获取textfield
这是prepareForSegue函数
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "seguedropdown2" {
vc.datacallback = { (message) in
if(message[2] as! Int == 8) {
self.Smat_Receiver1 = "\(message[0])"
self.receiver.receiverName1 = self.Smat_Receiver1 // Observer added here. But it's not called
}
if(message[2] as! Int == 9) {
self.Smat_Receiver2 = "\(message[0])"
self.receiver.receiverName2 = self.Smat_Receiver2 //Observer added here. But it's not called
}
}
}
}
这就是我设置观察者的方式
var ob:NSKeyValueObservation!
let receiver = Receiver()
override func viewDidLoad() {
super.viewDidLoad()
ob = receiver.observe(\Receiver.receiverName1, options: .new) { person, change in
print("Receiver 1 is now \(person.receiverName1)")
}
ob = receiver.observe(\Receiver.receiverName2, options: .new) { person, change in
print("Receiver 2 is now \(person.receiverName2)")
}
}
在其他地方,我设置了接收器,就像这样
@objc class Receiver: NSObject {
@objc dynamic var receiverName1 = String()
@objc dynamic var receiverName2 = String()
}
我的问题是,只要我设置了一个新值,就不会调用观察者。代码中的问题是将两个观察实例保存到一个变量中,但每个实例都应该单独存储,这会导致第一个实例失效
var ob1:NSKeyValueObservation!
var ob2:NSKeyValueObservation!
...
ob1=接收者。观察(\.receiverName1,选项:。新建){个人,更改
...
}
ob2=接收者。观察(\.receiverName2,选项:。新建){个人,更改
...
}
为什么需要KVO,那么willSet/didSet
呢?是的……我最后使用了willSet/didSet
。但我想知道为什么KVO在这种情况下不工作。。。