最佳实践?从segues传回对象引用

时间:2013-06-16 13:28:50

标签: ios reference segue

早上好。

在过去的一年里,我一直在研究很多教程,并且已经看到了几种传递引用的方法,这些方法将View Hierarchy与Storyboard一起备份。我想知道一些最佳实践是什么,更重要的是使用以下方法的任何陷阱:

  1. 协议 - 子视图实现协议,父视图将自身设置为消息的委托和响应。这可用于将信息传递给代理。孩子不需要知道它被称为它的原因,它做的工作,并发送回要求的任何信息。

  2. 具有模型引用的Child ViewController的公共属性。在segue上,您将检索对目标视图Controller的引用。此视图控制器具有公开公开的模型属性。您传递对模型的引用。我个人喜欢这种方法 - 看不到任何真正的坑。然后当孩子做出改变时,模型会直接改变。在点[self.navigationController dismissViewControllerAnimated:YES]被调用,或者你导航/关闭视图控制器,你有你想要的模型中的信息。

  3. 任何一个人? - 别人有个好主意,我很想听。

  4. 感谢任何人对此的意见。我知道有一种方法可以给猫皮肤涂抹,我只想干净而快速地涂抹猫皮。 (-Sorry cat)

    史蒂夫

2 个答案:

答案 0 :(得分:1)

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

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

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

  3. 使用核心数据(或SQLite)进行持久存储;或

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

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

答案 1 :(得分:0)

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

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

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

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

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

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