如何在整个应用程序中保持模型更新
Posted
技术标签:
【中文标题】如何在整个应用程序中保持模型更新【英文标题】:How to keep a Model updated throughout the app 【发布时间】:2013-10-15 19:48:58 【问题描述】:我有一个锻炼应用程序和一个模型,其中包含所有锻炼的所有数据。现在我正在使用单例从该 TableView 的每个子 VC 访问模型。我遇到了问题,我想删除单例。
现在我将如何在整个应用程序中更新模型并从任何位置在应用程序内访问它?单例很容易。 I think i need to pass the model back from the Child VC to the Parent, so the Parent can pass it to the next Child VC when the next exercise is selected.
【问题讨论】:
您能否详细介绍“遇到问题”?什么样的问题? 我无法让 State Preservation and Restoration 与 Singleton 一起正常工作 【参考方案1】:我没有使用状态保存和恢复,所以我不知道你的模型是单例有什么问题(如果你详细说明这个问题,我可能有一些想法可以提供帮助),但我发现在数据模型简单的应用程序上,如您所指出的,单例通常更容易。也就是说,如果它不是一个选项,你会想要pass the model object between controllers。基本上在每个控制器上放置一个属性,然后在你的 segues 中将该对象传递给目标控制器。
当您从导航堆栈中弹出控制器时,您还需要更新视图,以防任何数据发生更改。如果您正在使用情节提要并且有少量场景(情节提要中的各个“屏幕”),则很容易连接Unwind segue,它会调用父控制器上的一个方法来通知它孩子正在弹出从堆栈中取出 - 您可以从子节点上抓取对象,将其存储在父控制器上,然后刷新其视图。
ios 应用中有several ways to persist data。我最喜欢的是Core Data 和序列化。如果您的模型非常简单(一个或两个对象实例,每个对象只有几个属性)序列化非常容易 - 使用 NSCoding 对您的对象进行编码/解码,并在您的应用程序数据目录中使用 save that data to a file。如果你的模型比较复杂(比如对象之间有关系,或者有大量的对象实例)Core Data 是一个不错的选择。它管理内存中的对象“图形”并为您处理将其持久化到磁盘;如果您将来需要改进模型,它甚至可以处理升级您的持久存储。它非常强大,但有一点学习曲线。
【讨论】:
谢谢,这也是我第一次进行国家保护和恢复,这让我很困惑。我知道如何将对象传递给目标 VC,但我将如何将其传递回父级,以便在移动到下一个子 vc 时具有新数据? 顺便说一句,您是否使用其他东西来记住应用程序状态和启动之间的数据? 我更新了我的答案以详细说明如何在情节提要中使用展开转场。如果您不使用故事板,请编辑您的问题以详细说明您如何处理导航,我可以为您提供量身定制的答案。 在我编写的应用程序中,我确保数据定期保存,因此如果应用程序退出,什么都不会丢失。绝大多数情况下,应用程序永远不会退出,因此不需要进行状态恢复。在它确实退出的极少数情况下,唯一丢失的是导航堆栈上的几次推送。根据 Apple 的说法,我们都应该使用状态恢复,但对于相对简单的应用程序来说,这似乎有点矫枉过正。 你是怎么坚持下来的?你把它放在 NSUserDefaults 中了吗?这就是我正在考虑用 NSCoding 而不是状态恢复来做的事情。以上是关于如何在整个应用程序中保持模型更新的主要内容,如果未能解决你的问题,请参考以下文章