1

我一直在考虑这个问题,并阅读了另一个关于在视图控制器之间进行通信的最佳推荐方式的stackoverflow 问题。然而,这个问题/答案似乎并没有解决反向行为的最佳方法。

即要将数据从它传递ParentController给它ModalController,我们可以像初始化ModalController一样initWithDataToProcess:

但是如果我们想做相反的事情呢?我将如何通知以前的控制器有关新数据的信息?

例如,用户单击 上的“新人”按钮ParentController。我启动一个新ModalController的并通过presentModalViewController:. 用户单击“完成”以添加新人。我dismissModalViewController:和 UI 返回到ParentController的视图。

在单例对象(应用程序委托或其他)中使用全局字段引用是不好的。委托(通过正式协议)和通知(通过 NSNotificationCenter)似乎有点过分了。有什么建议么?

4

2 回答 2

1

使用通知通常更干净。只需像这样添加您的观察者....

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(somethingHappened:) name:@"MyNotification" object:nil];

在您的代码中的其他地方,您可以在需要时发布通知。

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];

在示例中,我传递了 self 但你可以传递任何你想要的对象,它将被提供给你的 somethingHappened: 函数

重要的是保持@"MyNotification" 非常具有描述性和独特性。将您的项目名称添加到开头是保持事物独特性的好方法......例如。@"ProjAXViewHasGotData"

于 2010-10-15T19:06:35.233 回答
0

委托几乎是您可以做的最低要求。如果您认为为此声明一个新协议太麻烦,只需传入父视图控制器并让模态控制器调用它的方法。

于 2010-10-15T16:10:09.957 回答