关于ios:如何保存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,但这似乎与您要执行的操作不同。而且,如果您只是想让数据保留该应用程序实例的生命周期,请将其存储在常规属性中。

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

1
2
3
4
5
6
7
8
class SurveyAnswers {

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

}

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

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

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