ios - 在 iOS 中存储/加载本地数据的最佳方式是什么?

标签 ios database

我是一名初学者(学生)程序员,目前正在构建一个类似类(class)目录的应用程序,我可以在其中查看学校内某些专业所需的类(class)。

目前,我制作了一个单独的 data.swift 文件来将所有数据存储为全局数据,并制作了一堆 huuuuge 数组。在主 TableView 中,我只是从我的 data.swift 文件加载数据。

数据.swift

let data1:[[[[String]]]] = [some datas]
let data2:[[[[String]]]] = [some datas]
let sectionHeaders [[String]] = [some datas]

在我的 tableviewcontroller 上,我通过做加载它们

cell = data1[choice1][choice2][choice3]

...等等

但是,我知道这不是应该如何完成的,至少 xcode 告诉我“表达式太复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式”在我的数组 =(, 我只是不知道任何其他方式 =(

我实际上用谷歌搜索了一下,发现有些人推荐 plist,有些人则推荐 sqlite、json、xml 等。

对于存储和加载 BIG 本地数据,最好/最有效和最快的方法是什么?

谢谢!!

最佳答案

我知道您的结构比较复杂,但我想解决多数组问题。考虑这样的事情:

let teachers = ["Larry Fine", "Curly Howard", "Moe Howard"]
let classNames = ["Calculus 101", "Religious Studies 102", "Teaching with Technology in Film and Media Studies 201"]

与其拥有多个数组,不如拥有一个结构,例如:

struct Course: Codable {
    let teacher: String
    let className: String
}

然后您可以在文本文件中的单个 JSON 结构中表示它,例如 courses.json,如下所示:

[
  {
    "teacher" : "Larry Fine",
    "className" : "Calculus 101"
  },
  {
    "teacher" : "Curly Howard",
    "className" : "Religious Studies 102"
  },
  {
    "teacher" : "Moe Howard",
    "className" : "Teaching with Technology in Film and Media Studies 201"
  }
]

In Swift 4, you'd do something like:

var courses: [Course]?

然后从您的包中加载一个 JSON 文件并填充 courses:

let fileURL = Bundle.main.url(forResource: "courses", withExtension: "json")!
let data = try! Data(contentsOf: fileURL)
courses = try! JSONDecoder().decode([Course].self, from: data)

然后您将得到一个单一的类(class)数组,它比单独的 teacherscourseNames 数组更有优势。例如,如果您想按类(class)名称对类(class)进行排序,它会确保类(class)名称和教师姓名一起排序。

现在,我知道你的结构比这更复杂,所以你的 JSON 也可能变得更复杂,但我只是想说明 (a) 自定义对象的想法; (b) 使用 Swift 4 的新 Codable 协议(protocol)和 JSONDecoder 来解析该 JSON。

关于ios - 在 iOS 中存储/加载本地数据的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46370901/

相关文章:

ios - 非事件约束变为事件?

sql-server - 性能星型模式(BI)

database - 如果我使用存储过程,是否可以避免 SQL 注入(inject)?

mysql - 触发逻辑导致错误

database - Postgres : Advantages of combining columns

ios - Firebase 数据的服务器端过滤

ios - UITableview 页脚在向下滚动时刷新?

ios - 更新需要用户登录的 iOS 应用程序

iphone - 来自 NSString 的 NSData

ios - 我需要在启动前将基于 Realm 的数据库连接到服务器吗?