新的通知目前是否在Swift 3中有效?
我正在做:
NotificationCenter.default().post(name: DidTouchParticleView, object: self.particle as? AnyObject)在自定义视图的touchesBegan()中,我需要将particle对象发送到视图控制器(如果有)。所以我就这么做:
NotificationCenter.default().addObserver(forName: DidTouchParticleView,
object: self,
queue: OperationQueue.main(),
using: presentParticleDisplayView(notification:))在视图控制器的viewDidLoad()中。我确信这个特定的视图控制器是在我点击我的自定义视图时出现的,但是,函数presentParticleDisplayView(notification:)从未被调用过。
此外,DidTouchParticleView在全局范围内定义如下:
let DidTouchParticleView = NSNotification.Name("didTouchParticleView")这是因为测试版,还是我做错了什么?
发布于 2016-07-11 15:10:12
听起来,您可能打算调用addObserver(_:selector:name:object:),其中第二个参数消息( selector:)被发送到第一个参数(目标)。
相反,您调用了错误的方法,addObserver(forName:object:queue:using:),它的工作方式完全不同。
另外,关于你问题的第二部分:
let DidTouchParticleView = NSNotification.Name("didTouchParticleView")那几乎是正确的;应该是
let DidTouchParticleView = Notification.Name("didTouchParticleView")所有通知名称现在都是Notification.Name实例。这样做的正确方法是:
extension Notification.Name {
static let didTouchParticleView = Notification.Name("didTouchParticleView")
}然后,您可以在代码中将通知的名称称为.didTouchParticleView。
发布于 2016-07-11 15:04:14
您正在监视自己发布通知(object: self)。您可能是指类似于object: particle或addObserver调用中的object: nil (但请注意确保它是处理程序中的正确粒子)。重新读取此方法的文档,并仔细注意object参数的作用。
请注意,此版本的addObserver返回一个观察者对象。您必须存储它,以便以后可以使用它调用removeObserver。
https://stackoverflow.com/questions/38310080
复制相似问题