0%

swift持久化存储轻量数据

做个简单的记事本,效果如下:

主要使用UserDefaults(以前是NSUserDefaults)实现数据的持久化,将Array数据存储在沙盒里。

直接使用

1
func syncStore(){
2
    UserDefaults.standard.set(objects, forKey: "history")
3
    UserDefaults.standard.synchronize()
4
}

存数据。

读取数据使用

1
objects = UserDefaults.standard.value(forKey: "history") as! Array<Any>

在第一次启动的时候读数据会出错,因此需要判断是否为第一次启动,如果是第一次启动则需要初始化存储结构。

1
let isFirstLaunch = UserDefaults.standard.string(forKey: "FirstLaunch") == nil
2
if(isFirstLaunch){
3
    UserDefaults.standard.set("false", forKey: "FirstLaunch")
4
    syncStore()
5
}else{
6
    objects = UserDefaults.standard.value(forKey: "history") as! Array<Any>
7
}

插入数据的function:

1
func insertNewObject(_ sender: Any) {
2
    let alertController = UIAlertController(
3
    title: "添加备忘", 
4
    message: "请输入备忘内容", 
5
    preferredStyle: UIAlertControllerStyle.alert)
6
    let insertAction = UIAlertAction(
7
    title: "确认", 
8
    style: .default, 
9
    handler: {
10
    (action: UIAlertAction) -> Void in
11
        print(alertController.textFields![0].text!)
12
        self.objects.insert(alertController.textFields![0].text!, at: 0)
13
        let indexPath = IndexPath(row: 0, section: 0)
14
        self.tableView.insertRows(at: [indexPath], with: .automatic)
15
        self.syncStore()
16
    })
17
    let cancelAction = UIAlertAction(title: "取消", style: .cancel)
18
    alertController.addTextField { (textField:UITextField) in
19
        textField.placeholder = "请输入内容"
20
    }
21
    alertController.addAction(insertAction)
22
    alertController.addAction(cancelAction)
23
    self.present(alertController, animated: true, completion: nil)    
24
}