通过控制器传递复杂对象(核心数据)

时间:2012-09-22 10:44:13

标签: iphone ios core-data

我完全迷失了。

问题是在我的向导中通过viewcontrollers传递数据。 我的项目包含4个viewcontrollers:

  • Step1ViewController,可以填写姓名
  • Step2ViewController,可以填写昵称
  • Step3ViewController,可以填写emailaddress,
  • Step4ViewController,填写兴趣的可能性,完成

所有视图控制器都被推送到导航控制器。单击navigationtoolbar上的栏按钮可以进入下一步。我想要实现的是收集步骤中的所有数据并在最后一步创建保存NSManagedobject(通过单击完成按钮)。因此,当用户退出步骤2并重新启动应用程序时,应该没有保存的对象。所以他将重启向导。当核心数据中有人物对象时,会加载另一个视图(这是委托类中的条件)

我知道当你有一个简单的模型模式时,可以使用prepareForSegue方法轻松地向控制器传递数据。收集所有变量并创建和保存核心数据对象。为了将数据传回上一步,我可以使用协议。

但在我的应用程序中,我的模型架构更复杂。我的向导包含大约18个步骤,并且人员模型有许多相关模型(如培训计划,兴趣等),所以我认为收集变量中的所有数据并在最后一步中将它们组合在一起真的不是一个好方法。

这样做的最佳方式是什么?

我上传了一个向导示例应用程序,其中包含几个步骤和两个模型(人员和兴趣(一对多))。希望这会使它更清晰。随意修改代码:https://github.com/stalkert/WizardPrototype

1 个答案:

答案 0 :(得分:0)

我想到了两个想法 - 每个想法各有利弊。两者都使用可变字典的概念,该字典将保存最终所需的所有各种数据。此外,您将使用NSNumber对象添加key ='step'。

1)假设所有视图控制器最初都不存在,他首先控制器创建字典,添加它应该提供给它的数据,并将“步骤”设置为2。然后它创建并运行一个新的viewController,将字典传递给属性中的字典。第二个验证步骤是否正确,添加它应该是什么,然后将其传递给另一个控制器。这里的“步骤”可以作为一种测试,实际上字典应该处于应有的阶段。

2)假设视图控制器已经实例化,那么使用与上面相同的“步骤”概念,但使用通知。第一步完成后,将字典存储在默认值,类或单例对象或appDelegate(在属性中)。发送通知 - 并添加userInfo,它是完整字典或提供下一步的数字。应该执行第3步的控制器可以看到它的转向,所以它应该变为活动状态(自动切换UITabBarController选项卡等)。

在任何一种情况下,当最后一步完成时,将字典发送到管理存储库的类或直接执行。