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上向我发送问题。

  1. 使用Single View Application在Xcode中创建一个新项目就足够了。 我正在命名NotificationCenterTableView。
  2. 使用Interface Builder / Storyboard(IB)设计实验的基本结构。

经过一些基本的摆弄后,您应该能够将视图连接在一起并正确设置项目。

ROADBLOCK:

问题是,当我们关闭视图时,UITableView不会更新。 我们对于它可以做些什么呢? NotifcationCenter来了!!!

  1. 我们需要发布(创建)一个通知,告诉其他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时,也许应该使用它。 会回到这个……