我一直在考虑这个问题,并且已经通过另一个stackoverflow question阅读了有关在视图控制器之间进行通信的最佳推荐方法。然而,问题/答案似乎并没有解决反向行为的最佳方法。
即。要将数据从ParentController
传递到ModalController
,我们可以将ModalController
初始化为initWithDataToProcess:
。
但是如果我们想要做反向怎么办?如何通知前一个控制器有关新数据的信息?
e.g。用户点击ParentController
上的“新人”按钮。我发起了一个新的ModalController
,并通过presentModalViewController:
向用户显示了人物编辑器视图。用户点击“完成”即可添加新人。我dismissModalViewController:
和UI返回ParentController
的视图。
在单个对象(app委托或其他)中使用全局字段引用是不好的。 委托(通过正式协议)和通知(通过NSNotificationCenter)似乎有点矫枉过正。有什么建议吗?
答案 0 :(得分:1)
使用通知通常更干净。只需添加你的观察者......
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(somethingHappened:) name:@"MyNotification" object:nil];
以及代码中的其他位置,您可以随时发布通知。
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];
在示例中,我正在传递自己,但你可以传递任何你想要的对象,它会被送到你的东西发生:功能
重要的是保持@“MyNotification”非常具有描述性和独特性。将项目名称添加到开头是保持事物独特性的好方法......例如。 @ “ProjAXViewHasGotData”
答案 1 :(得分:0)
代表几乎是你能做到的最低限度。如果您认为为此声明一个新协议太麻烦,只需传入父视图控制器并让模态调用一个方法。