在视图控制器之间反向通信的最佳方法是什么?

时间:2010-10-15 16:04:52

标签: objective-c model-view-controller controllers

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

即。要将数据从ParentController传递到ModalController,我们可以将ModalController初始化为initWithDataToProcess:

但是如果我们想要做反向怎么办?如何通知前一个控制器有关新数据的信息?

e.g。用户点击ParentController上的“新人”按钮。我发起了一个新的ModalController,并通过presentModalViewController:向用户显示了人物编辑器视图。用户点击“完成”即可添加新人。我dismissModalViewController:和UI返回ParentController的视图。

在单个对象(app委托或其他)中使用全局字段引用是不好的。 委托(通过正式协议)和通知(通过NSNotificationCenter)似乎有点矫枉过正。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用通知通常更干净。只需添加你的观察者......

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

以及代码中的其他位置,您可以随时发布通知。

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

在示例中,我正在传递自己,但你可以传递任何你想要的对象,它会被送到你的东西发生:功能

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

答案 1 :(得分:0)

代表几乎是你能做到的最低限度。如果您认为为此声明一个新协议太麻烦,只需传入父视图控制器并让模态调用一个方法。