1

早上好。

在过去的一年中,我一直在学习很多教程,并且已经看到了几种使用 Storyboards 将参考传递回 View Hierarchy 的方法。我想知道一些最佳实践是什么,更重要的是使用以下方法的任何陷阱:

  1. 协议 - 子视图实现一个协议,父视图将自己设置为委托并响应消息。这可用于将信息传回给委托人。Child 不需要知道任何关于它被调用的原因,它完成了它的工作,并发送回它被要求的任何信息。

  2. 具有模型引用的子 ViewController 的公共属性。在 segue 中,您检索对目标视图控制器的引用。此视图控制器具有公开公开的模型属性。你传入你对模型的引用。我个人喜欢这种方法 - 看不到任何真正的陷阱。然后当孩子进行更改时,模型会直接更改。在该点[self.navigationController dismissViewControllerAnimated:YES]被调用,或者您导航关闭/关闭视图控制器,您在模型中拥有所需的信息。

  3. 还要别的吗?- 其他人有一个好主意,我很想听听。

感谢任何人对此的意见。我知道给猫剥皮的方法不止一种,我只想干净、快速地给猫剥皮。(-对不起猫)

史蒂夫

4

2 回答 2

1

为了完整起见,除了您列举的两个选项之外,还有其他几个选项:

  1. 使用 unwind segue(iOS 6 及更高版本),您可以通过 ; 将数据传递到“目标”(您要展开的控制器)prepareForSegue

  2. 为您的主模型对象使用单例;

  3. 使用 Core Data(或 SQLite)进行持久存储;或者

  4. 使用通知或键值观察(尽管这对于将数据更新传达给多个对象要好得多)。

就个人而言,我通常会使用一个协议,当它只是一个呈现视图控制器想要通知呈现视图控制器一些信息的问题时,但是这些技术中的每一种都有它们各自的用途。

于 2013-06-16T13:54:14.667 回答
0

根据您的需要,还有另一种选择,不需要 segue。

子视图控制器可以创建自己的对象或获取任何对象的已知共享引用。创建自己的对象将有利于向表中添加新项目。获取已知的共享引用对于设置对象之类的东西很有用。

当子视图控制器准备好被解雇时,它会发布一个通知。

[[NSNotificationCenter defaultCenter] postName:MyAppDidCreateNewItem object:self.item];

或者

[[NSNotificationCenter defaultCenter] postName:MyAppDidUpdateSettings object:self.settings];

父视图控制器注册为通知的观察者。当通知发生时,父视图控制器可以notification.object用来获取引用并更新自身。

于 2013-06-16T13:51:24.113 回答