如何将UIPageViewController的子视图控制器中的值保存到应用程序的其他位置?

时间:2017-12-23 01:11:05

标签: ios swift uipageviewcontroller

我有一个UIPageViewController包含多个视图控制器,每个视图控制器都有问题供用户响应。一旦这些问题得到解答,我想在本地某处保存值,以便稍后我可以创建一个填充了这些值的PDF。做这个的最好方式是什么?我会使用NSUserDefaults吗?

1 个答案:

答案 0 :(得分:1)

这取决于您希望数据如何持久化。如果您希望数据持续用户的生命,即使从设备中删除了应用程序,您显然也需要将其存储在客户端之外,例如数据库(即Realm,CoreData)。如果您希望数据能够持续存在应用程序本身的生命周期,您将继续使用这些数据来塑造用户的体验,那么您可以使用UserDefaults,但这看起来不像您和#39;重新尝试做。如果您只是希望数据能够持久保存应用程序实例的生命周期,请将其存储在常规属性中。

我怀疑,无论出于何种原因,第三种选择都是您的选择。如果是这样,我建议创建一个模型对象,作为父视图控制器的实例属性(所有页面视图控制器都可以引用)......

class SurveyAnswers {

    var userName: String?
    var userAge: Int?
    var favoriteSauce: PizzaSauce?
    var livesWithCats: Bool?

}

...并且只需使用协议/委托模式将数据从子节点传递给父节点,父节点将更新该节点中的属性(只要它们更新该对象的相同实例)。然后,当您准备好准备PDF文件时,只需询问父对象,该对象的属性已由子视图控制器设置。

如果您对此感到满意,可以使用共享AppDelegate作为存储和检索此数据的方法。我只是提醒我不要习惯这个习惯,但根据你的整体应用,这可能是一个完全可以接受的选择。

一般经验法则:在目标对象中设置属性以向前传递数据并使用委托向后传递数据。