1

我完全迷路了。

问题是通过我的向导中的视图控制器传递数据。我的项目包含 4 个视图控制器:

  • Step1ViewController,可填写名称
  • Step2ViewController,可填写昵称
  • Step3ViewController,可以填写邮箱地址,
  • Step4ViewController,可填写兴趣,完成

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

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

但是在我的应用程序中,我的模型模式要复杂得多。我的向导包含大约 18 个步骤,并且 Person 模型有很多相关模型(如培训计划、兴趣等),所以我认为在变量中收集所有数据并在最后一步将它们全部组合起来确实不是一个好方法。

做这个的最好方式是什么?

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

4

1 回答 1

0

我想到了两个想法——每个都有自己的优点和缺点。两者都使用可变字典的概念,该字典将保存您最终需要的所有各种数据。此外,您将添加一个带有 NSNumber 对象的 key='step'。

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

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

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

于 2012-09-22T12:18:57.613 回答