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

时间:2017-09-22 18:15:30

标签: ios database

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

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

data.swift

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

在我的tableviewcontroller上,我通过执行

加载它们
cell = data1[choice1][choice2][choice3]

...等

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

我知道你的结构更复杂,但我想解决多阵列问题。考虑类似的事情:

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"
  }
]

在Swift 4中,你会做类似的事情:

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)

然后,您最终得到一系列课程,这些课程优于单独的teacherscourseNames数组。例如,如果您想按课程名称对课程进行排序,则可确保课程名称和教师姓名一起排序。

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

答案 1 :(得分:0)

您可以使用UserDefaults类。它简单易用。阅读有关可以检索值的所有不同方法的文档。

保存数据:

let defaults = UserDefaults.standard
defaults.set("Dewan Payroda", forKey: "Name")

检索数据:

let data = defaults.object(forKey: "Name") 
print(data)