Swift - 如何在安装前将 json 文件保存在应用程序中

Posted

技术标签:

【中文标题】Swift - 如何在安装前将 json 文件保存在应用程序中【英文标题】:Swift - How to save json files in the app prior to installation 【发布时间】:2017-08-09 11:35:41 【问题描述】:

我对 ios 很陌生,所以我不知道解决问题的最佳方法:我使用 API 来获取我在应用程序中显示的数据(使用 Alamofire 发送请求并获取 json 文件)。我的问题是我不能依赖这个 API 来总是响应(API 创建者知道这个问题)。所以我正在考虑在我的应用程序中保存我需要的所有 json 文件(几十个)。这是最佳做法吗?如果是这样,我该怎么做?

【问题讨论】:

如果无法连接到端点,当然可以将内容文件添加到项目中并阅读它们。可以将文件添加到项目中并选择为“复制捆绑资源” 听起来像我需要的。 【参考方案1】:

您需要将您的应用与这些 plist 捆绑在一起。它会在首次应用程序启动时提供给您,但也会增加应用程序的大小(实际上取决于个人 plist 的大小)。

plist 需要复制到 Bundle 资源中。只需将它们添加到您的工作区/项目中即可。

这样,这些 plist 将与您的应用程序捆绑在一起,例如 .storyboard、.xib 文件和图像。此外,由于这些可以直接从您的 ipa 中读取,因此不要在这些 plist 中保留任何秘密数据

之后确保只需检查 Target->BuildPhases-> Copy Bundle Resources。您的文件应该在那里列出。

从捆绑的 plist (Swift 3) 中读取数据:

if let fileUrl = Bundle.main.url(forResource: "fileName", withExtension: "plist"),
            let data = try? Data(contentsOf: fileUrl) 
            if let result = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) 
                print(result) // result is of type Any here, and needs to be converted to appropriate type(depends on plist root)
            
        

【讨论】:

这听起来像我需要的。我是新人,能详细点吗? 这些 plist 与您的应用程序捆绑在一起,例如 .storyboard、.xib 文件、图像。此外,由于这些可以直接从您的 ipa 中读取,因此不要在这些 plist 中保留任何秘密数据。【参考方案2】:

让我重述问题并告诉我是否理解正确。您的应用程序依赖于调用服务器来获取数据,而服务器并不总是响应。您正在考虑当服务器成功命中时,您希望保存获取的数据以便在服务器失败时能够使用它们。

如果是这种情况,执行此操作取决于您的应用。如果您的应用程序依赖于向用户显示实时内容,那么显示旧内容是无用的,那么保存数据也是无用的;但是,如果您向用户展示的内容几乎相同,或者如果该数据没有太大变化,则无关紧要,那么最好保存这些数据并将其“离线”显示给用户模式”。

如何保存这些数据? iOS 中有几种方法可以保存内容。一种是将您的对象保存在 NSUserDefaults 中,这不是很受欢迎。另外两种方法是保存在 SQLLite 或 CoreData 中。您可以在文档中查找更多信息或阅读有关如何执行此操作的文章。我最喜欢保存在 SQLLite 中,这是我个人的喜好。您应该阅读所有这三个,看看最能满足您的需求。

希望这会有所帮助。祝你好运。

【讨论】:

谢谢。由于我不能依赖服务器响应,我想将 json 文件添加到应用程序中。当用户安装应用程序时,我可以保持离线状态,仍然可以看到数据。是的,数据变化不大,所以没关系。

以上是关于Swift - 如何在安装前将 json 文件保存在应用程序中的主要内容,如果未能解决你的问题,请参考以下文章

保存前将节点添加到XML

如何在swift中将json数组保存和检索到用户默认值?

如何在 Swift 中将 JSON 数据保存到 UserDefault? [复制]

如何保存响应 JSON 数组并在 swift 中使用用户默认值进行检索

Swift 3 中的 JSON 图像和核心数据 [关闭]

如何将用户登录的 JSON 响应保存到 Core Data 中以跟踪 Swift 中的用户状态?