我来自 .NET Web 应用程序背景,刚刚开始 iOS 开发。我的应用程序的初始设计侧重于 NSNotificationCenter。我对此相当满意,直到我看到各种帖子解释如何到达 NSNotificationCentre 是一个常见的新手错误。
这是我要解决的问题的简化版本:
我的应用程序试图显示使用 Web 服务调用填充的消息列表,想想 Facebook 消息传递。
首次加载应用程序时,它会从服务器拉取一组消息并将它们显示在一个表格中给用户。用户可以添加新消息(通过 API 发回),应用程序可以接收有关添加到提要的新消息的推送通知。
消息永远不会保存到磁盘上,所以我只是使用 POCO 作为模型来保持简单。
我有一个 MessageFeedController 负责填充消息提要视图(在故事板中)。我还有一个消息提要模型,它存储当前检索到的值并具有各种方法:
- (void) loadFromServer;
- (void) createMessage: (DCMMessage*) 消息;
- (void) addMessage: (DCMMessage*) 消息;
- (NSArray*) 消息;
- (int) 未读消息;
我目前的实现是这样的:
用例 1:初始负载
- 当视图首次出现时,会调用“loadFromServer”方法。这会填充消息集合并引发 NSNotificationCenter 事件。
- 控制器观察到这个事件,并在收到它时填充表格视图
用例 2:新消息
- 当用户单击“添加”按钮时,会出现一个新视图,他们输入他们的消息,点击发送,然后视图被关闭。
- 这会调用模型上的 createMessage 方法,该方法调用 API
- 一旦我们得到响应,模型就会引发 NSNotificationCenter 事件
- MessageFeedController 再次侦听此事件并重新填充表
用例 3:推送消息
- 应用程序打开时收到推送通知,其中包含新消息详细信息
- AppDelegate(或其他类)将调用模型上的 addMessage 方法,将其添加到集合中
- 再一次,假设 MessageFeed 视图是打开的,它会重新填充
在所有三种情况下,MessageFeed 视图都会更新。除此之外,BadgeManager 还监听这些事件,这些事件负责设置应用程序图标徽章和标签栏徽章,在这两种情况下,徽章编号都与未读消息的数量有关。
另一个视图也可能打开并正在侦听这些事件,该视图包含消息摘要,因此需要知道集合何时更改。
是的,感谢您的支持,我的问题是:这似乎是对 NSNotificationCentre 的有效使用,还是我滥用了它?
我担心的一个问题是,如果消息集合在重新填充消息表的过程中发生变化,我不能 100% 确定会发生什么。我唯一能看到这种情况发生的情况是收到关于新消息的推送通知。在这种情况下,表格的人口是否必须在对 NSNotification 采取行动之前完成?
谢谢你的帮助
担。