ios - 在缓存 iOS Swift 中存储数据数组

标签 ios arrays swift caching

在我的应用程序中,我通过网络服务获取应用程序的菜单。它大约有 423 条很少更改的记录。我需要的是在第一次登录后将此记录缓存在应用程序中并使用缓存的数据。如果菜单数据库中有任何更改,那么它应该再次从 Web 服务刷新菜单内容。 我不太确定如何实现这一目标。目前我将所有记录存储在菜单类数组中并直接使用,这非常耗时,因为我们一次又一次地为类似记录打服务电话。我是 iOS 开发的新手,所以欢迎任何建议。

谢谢!

最佳答案

将数据存储在NSUserDefaults(如果这是不常见但永久的配置数据)或NSCache(用于临时数据)或CoreData(用于永久的、性能相关的数据)。

在应用程序启动时加载此缓存数据;如果缓存的数据不存在,请从您的网络服务/API 中检索它。

如果您不关心更改菜单内容后数据是否立即更新,请使用类似 Cache-Control header 的内容来设置失效时间段 ( details ) .如果您确实想要确保菜单在新的远程版本可用时立即更新,那么您需要设置一个版本控制系统,您的应用程序会在其中调用 API 来检查菜单并根据需要进行更新。

示例场景:

  1. 应用发布
  2. NSUserDefaults/CoreData/NSCache加载菜单内容
  3. 异步检查 API 的菜单版本
  4. 如果存在新版本的菜单,则异步下载并刷新菜单 View
  5. 将更新版本的菜单保存回 NSUserDefaults/CoreData/NSCache

关于ios - 在缓存 iOS Swift 中存储数据数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40445667/

相关文章:

ios - 如何一个一个地发出多个网络请求,这样我就不会丢失数据?

ruby - 'input = self' 和 'input = self.dup' 有什么区别

c++ - 通过指向其第一个元素的指针将数组分配给数组

ios - 具有特定服务 uuid 的 ScanPeripherals

ios - swift:如何在两个 UITableViewCell 之间翻转单元格

swift - 如何在 sqlite 或 CoreData 中保存位置坐标,并在 swift 中进行重要的位置监控

ios - 不是每次都调用drawRect

ios - reloadData 不调用 cellForItemAt

ios - iOS 12 中的 View 层次结构中缺少 searchBar

arrays - 如何在nodejs上提取数组