我有一个锻炼应用程序和一个模型,其中包含所有锻炼的所有数据。现在我正在使用单例从该 TableView 的每个子 VC 访问模型。我遇到了问题,我想删除单例。
现在我将如何在整个应用程序中更新模型并从任何地方在应用程序中访问它?单例很容易。我想我需要将模型从子 VC 传回给父,这样父可以在选择下一个练习时将它传递给下一个子 VC。
我有一个锻炼应用程序和一个模型,其中包含所有锻炼的所有数据。现在我正在使用单例从该 TableView 的每个子 VC 访问模型。我遇到了问题,我想删除单例。
现在我将如何在整个应用程序中更新模型并从任何地方在应用程序中访问它?单例很容易。我想我需要将模型从子 VC 传回给父,这样父可以在选择下一个练习时将它传递给下一个子 VC。
我没有使用状态保存和恢复,所以我不知道你的模型是单例有什么问题(如果你详细说明这个问题,我可能有一些想法可以提供帮助),但我发现在应用程序上数据模型很简单,就像您所指出的那样,单例通常更容易。也就是说,如果它不是一个选项,您将希望在 controllers 之间传递模型对象。基本上在每个控制器上放置一个属性,然后在你的 segues 中将该对象传递给目标控制器。
当您从导航堆栈中弹出控制器时,您还需要更新视图,以防任何数据发生更改。如果您正在使用情节提要并且有少量场景(情节提要中的各个“屏幕”),则很容易连接Unwind segue,它会调用父控制器上的一个方法来通知它孩子正在弹出堆栈 - 这是您从孩子身上抓取对象,将其存储在父控制器上并刷新其视图的地方。
有几种方法可以在 iOS 应用程序中保存数据。我最喜欢的是核心数据和序列化。如果您的模型非常简单(一个或两个对象实例,每个对象只有几个属性)序列化非常容易 - 使用 NSCoding 编码/解码您的对象并将该数据保存到应用程序数据目录中的文件中。如果你的模型比较复杂(比如对象之间有关系,或者有大量的对象实例)Core Data 是一个不错的选择。它管理内存中的对象“图形”并为您处理将其持久化到磁盘;如果您将来需要改进模型,它甚至可以处理升级您的持久存储。它非常强大,但有一点学习曲线。