Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 我们应该在哪里发送更新多个视图的通知?_Iphone_Design Patterns - Fatal编程技术网

Iphone 我们应该在哪里发送更新多个视图的通知?

Iphone 我们应该在哪里发送更新多个视图的通知?,iphone,design-patterns,Iphone,Design Patterns,我想问一下软件设计。 我有一个任务,视图控制器处理调用模型管理器来执行该任务的UI事件。完成后,模型管理器将回调以更新视图 还有其他视图控制器,它们关心该任务,并且还希望在该任务完成时更新自己的视图。因此,我在每个视图控制器中注册该任务的通知 问题是在模型管理器或处理事件并从模型管理器接收回调的视图控制器中,定义我应该在哪里发送“完成任务”通知? 什么是更好的设计?模型应该关心发送这个“公共”任务,还是视图控制器 我认为最好选择视图控制器,但我的朋友说视图控制器不应该关心其他视图控制器 谢谢先来

我想问一下软件设计。 我有一个任务,视图控制器处理调用模型管理器来执行该任务的UI事件。完成后,模型管理器将回调以更新视图

还有其他视图控制器,它们关心该任务,并且还希望在该任务完成时更新自己的视图。因此,我在每个视图控制器中注册该任务的通知

问题是在模型管理器或处理事件并从模型管理器接收回调的视图控制器中,定义我应该在哪里发送“完成任务”通知? 什么是更好的设计?模型应该关心发送这个“公共”任务,还是视图控制器

我认为最好选择视图控制器,但我的朋友说视图控制器不应该关心其他视图控制器


谢谢

先来看看核心数据

否则:
模型管理器执行其任务后,让视图控制器调用[view setNeedsDisplay]。这将迫使所有视图/表等重新绘制它们自己,在此过程中,它们应该从数据模型中检索信息并显示其当前内容。

首先查看核心数据

否则:
模型管理器执行其任务后,让视图控制器调用[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];

发布通知时,对象的
someName:
方法将以
NSNotification
的实例作为参数进行调用。

您可以向
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];

发布通知时,将调用对象的
someName:
方法,并以
NSNotification
的实例作为参数。

根据您的描述,模型似乎知道任务何时完成,因此模型应负责生成该通知

问题是在模型管理器或处理事件并从模型管理器接收回调的视图控制器中,定义我应该在哪里发送“完成任务”通知 我不明白你在这里的意思。通过
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
“视图控制器”是发送此消息的错误选择,因为它将视图控制器耦合在一起,应用程序的正常运行取决于此视图控制器的正常运行


考虑这样一种情况,该视图控制器由于占用太多内存而被卸载。现在,其他视图控制器将不会收到“任务已完成”通知,因为负责发送此通知的视图控制器已不在内存中,并且显然不会侦听通知。

根据您的描述,模型似乎知道任务何时完成,因此,模型应该负责生成该通知

问题是在模型管理器或处理事件并从模型管理器接收回调的视图控制器中,定义我应该在哪里发送“完成任务”通知 我不明白你在这里的意思。通过
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
“视图控制器”是发送此消息的错误选择,因为它将视图控制器耦合在一起,应用程序的正常运行取决于此视图控制器的正常运行


考虑这样一种情况,该视图控制器由于占用太多内存而被卸载。现在,其他视图控制器将不会收到“任务完成”通知,因为负责发送此通知的视图控制器已不在内存中,并且显然没有侦听通知。

抱歉,我认为您误解了这些视图,它们位于不同的视图控制器中。抱歉,我认为您误解了视图,它们位于不同的视图控制器中。如果您停止将UIViewController子类称为“视图”,您的问题将更容易自己回答。它们不是视图,它们是控制器。我刚刚编辑了这个问题以使其更清楚。我仍然需要您的洞察力解决方案或解释:)如果您停止调用UIViewController子类“视图”,您的问题将更容易自己回答。它们不是视图,它们是控制器。我刚刚编辑了这个问题以使其更清楚。我仍然需要你的洞察力解决方案或解释:)嗯,我想那个家伙会问谁会打电话给NSNotificationCenter来完成你上面描述的工作。他想问一下软件设计嗯,谢谢。这个问题是在我开始发帖后编辑的,所以我没有看到变化,