Swift婴儿101:NotificationCenter(类)
嗨! 我是蒂莫西(Timothy),目前正在“迅捷宝贝”学习中,通过Udacity的iOS Nanodegree计划编写iOS应用。 我会定期记录我在这个圣诞节假期(2017年)中的学习和进步情况(希望每天)。
我不喜欢在没有积极参与概念的情况下被动地学习和阅读Swift文档。 这些帖子的目的是激励自己,帮助回顾我的学习并也激励其他人学习!
现在进入主要主题-NotificationCenter!
定义:NotificationCenter用于单个程序内的内部应用程序通信。
- 在通知中心注册的对象使用
addObserver(_:selector:name:object:)
或addObserver(forName:object:queue:using:)
方法接收通知(NSNotification
对象)。 - 每个正在运行的应用都有一个
default
通知中心
备注:这不是我们通常称为“通知”的“用户通知”
- 发送到应用程序的所有系统通知都将发布到
default
通知中心。 - 如果您的应用广泛使用通知,则可能要创建并发布到自己的通知中心,而不是仅发布到
default
通知中心。 - 将通知发布到通知中心后, 通知中心将扫描已注册观察者的列表 ,这可能会使您的应用程序运行速度变慢。
- 通过在一个或多个通知中心周围组织功能上的通知,每次发布通知时所做的工作都会减少,从而可以提高整个应用程序的性能。
场景:您正在使用一个具有两个视图的简单应用程序:一个带有UITableView,另一个带有ViewController,用户将在其中填充将由其下面的UITableView填充的信息。 一个类似的示例将是股票日历应用程序:
您会问,这应该很简单,是吗? 您只需在TableView顶部显示另一个ViewController,然后在填充数据后将其关闭,然后保存! (您现在可能已经注意到了该问题)
您会发现这并不像看起来那样简单。
让我们尝试设置它! 注意:本教程假定您对Xcode和Swift有一定的经验。 如果您没有经验,请在我的GitHub上查看整个项目,并在Twitter @ncytimothy上向我发送问题。
- 使用Single View Application在Xcode中创建一个新项目就足够了。 我正在命名NotificationCenterTableView。
- 使用Interface Builder / Storyboard(IB)设计实验的基本结构。
经过一些基本的摆弄后,您应该能够将视图连接在一起并正确设置项目。
ROADBLOCK:
问题是,当我们关闭视图时,UITableView不会更新。 我们对于它可以做些什么呢? NotifcationCenter来了!!!
- 我们需要发布(创建)一个通知,告诉其他ViewController 观察 (注意)它。 注意,我们正在使用默认的NotificationCenter。
NotificationCenter.default.post(名称:NSNotification.Name(原始值:“ loadTable”),对象:无)
2.添加TableView的观察者
NotificationCenter.default.post(名称:NSNotification.Name(原始值:“ loadTable”),对象:无)
3.添加相应的“选择器”功能
@objc func reloadTable(){
favoritePeopleTable.reloadData()
}
嗯…看来我有一个错误,无法编译。 我只需在viewWillAppear中重新加载表即可解决该问题。 当ViewController是Root View Controller时,也许应该使用它。 会回到这个……