如何保存 UIPageViewController 的子视图控制器的值以在应用程序的其他地方使用?

How do I save values from the child view controllers of a UIPageViewController to use elsewhere in an app?

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

这取决于您希望数据如何持久保存。如果您希望数据在用户生命周期内持续存在,即使应用程序已从设备中删除,您显然也需要将其存储在远离客户端的位置,例如数据库(即 Realm、CoreData)。如果您希望数据在应用程序本身的生命周期中持续存在,您将继续使用这些数据来塑造用户体验,您可以使用 UserDefaults 但这似乎不是您想要做的。如果您只是希望数据在该应用程序实例的生命周期内持续存在,请将其存储在常规属性中。

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

class SurveyAnswers {

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

}

...并简单地使用 protocol/delegate 模式将数据从子级传递到父级,这将更新该对象中的属性(只要它们更新该对象的同一实例)。然后,当您准备好准备 PDF 文件时,只需向父对象询问该对象,其属性已由子视图控制器设置。

如果您同意,您可以使用共享 AppDelegate 作为存储和检索此数据的方式。我只是提醒不要养成这种习惯,但根据您的整个应用程序,这可能是一个完全可以接受的选择。

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