簡體   English   中英

我們應該在哪里發送更新許多視圖的通知?

[英]where should we send notification for updating many views?

我想問一下軟件設計。 我有一個任務,視圖控制器處理UI事件,以調用模型管理器執行該任務。 完成后,模型管理器將回調以更新視圖。

還有其他視圖控制器關心該任務,並且還希望在該任務完成時更新其自己的視圖。 因此,我在每個視圖控制器中為該任務注冊了一個Notification。

問題是定義在模型管理器或處理事件並從模型管理器接收回調的視圖控制器中,應在哪里發送“完成任務”通知? 什么是更好的設計? 模型應該關心發送此“公共”任務,還是視圖控制器?

我認為最好選擇View控制器,但是我的朋友說View控制器不應該在意其他View控制器。

謝謝

從您的描述看來, 模型知道任務何時完成,因此模型應負責生成該通知。

問題是在模型管理器或處理事件並從模型管理器接收回調的視圖控制器中,定義應在哪里發送“完成任務”通知

我不明白你在這里的意思。 通過NSNotificationCenter使用通知的全部目的是使發送方與接收方分離。 該模型只是將消息發布到通知中心,感興趣的訂戶將通過通知中心接收消息。 為此,視圖控制器不需要直接與模型管理器進行交互。

這是一種可能的工作流程:

在應用程序啟動時:

1. View Controller 1 subscribes to "onTaskFinished" message at NotificationCenter
2. View Controller 2 subscribes to "onTaskFinished" message at NotificationCenter
3. User presses "Perform Task" button in some view controller
4. Model Manager gets triggered and performs the task
5. Model Manager publishes "onTaskFinished" message to NotificationCenter

View Controller是發送此消息的錯誤選擇,因為它將視圖控制器耦合在一起,並且應用程序的正常運行取決於此視圖控制器的正常運行。

考慮這種視圖控制器由於占用過多內存而被卸載的情況。 現在,其他視圖控制器將不再接收“任務完成”通知,因為負責發送此通知的視圖控制器不再位於內存中,並且顯然也沒有監聽通知。

初步了解Core Data。

否則:在模型管理器執行其任務后,讓您的視圖控制器調用[view setNeedsDisplay]。 這將迫使您的所有視圖/表等重繪自身,並且在此過程中,他們應從數據模型中檢索其信息並顯示其當前內容。

您可以將通知發送到NSNotificationCenter實例,如下所示:

// after completing the task 
[[NSNotificationCenter defaultCenter] postNotificationName:@"noteName" object:self userInfo:optionalDic];

在發送此消息之前,您的視圖或任何其他文件都可以注冊以接收通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someName:) name:@"noteName" object:notification sender];

發布通知時,然后使用NSNotification實例作為參數調用對象的someName:方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM