DAY 14 『 Realm 新增、修改、删除 』Part2

昨天分享如何拉 @IBOutlet、按空白处收回键盘、struct 结构的撰写、Realm 环境安装
今天会介绍:

  1. 新增、修改、删除、印出 Realm 资料库的资料
  2. 读取 Realm 资料库的资料去更新 TableView

  • 更新tableview
func reloadData(){
    users = []
    let alluser = realm.objects(Datas.self)
    // 当资料库资料数为0时,也要执行表格重新整理的部分
    guard alluser.count > 0 else { tableView.reloadData(); print("nil"); return }
    for i in 1...alluser.count{
        users.append(SetUser(setuserName: alluser[i-1].name, setuserAge: String(alluser[i-1].age)))
    }
    tableView.reloadData() // 重新载入 tableView
}

在 override func viewDidLoad() 底下加上reloadData()

  • 新增资料
@IBAction func inputData(_ sender: UIButton) {
    let input: Datas = Datas()
    // 若 Age > 0 且 Name 不为空值
    if Int(ageTextField.text!) ?? 0 > 0 && (nameTextField.text != nil){
        input.name = nameTextField.text ?? ""     // name
        input.age = Int(ageTextField.text!) ?? 0 // age
        try! realm.write {realm.add(input)}  // 新增资料
    }
    else{ alertTrigger();print("输入的资料有误!") }
    reloadData() // 更新 TableView
}

  • 删除资料
@IBAction func deleteData(_ sender: UIButton) {
    let delete = realm.objects(Datas.self)
    // 若删除的 TextField 值 > 0 且 < 资料库的资料数+1
    if Int(deleteTextField.text!) ?? 0 > 0 && Int(deleteTextField.text!)! < delete.count+1 {
        // 删除资料库资料
        try! realm.write { realm.delete(delete[Int(deleteTextField.text!)!-1]) }
    }
    else{ alertTrigger();print("输入值有误!") }
    reloadData() // 更新 TableView
}

  • 修改资料
@IBAction func fixData(_ sender: UIButton) {
    let fixid = realm.objects(Datas.self)
    // 若修改的 TextField 的值不为空值,且资料库数量 > 0
    if (fixTextField.text != nil) && (fixid.count > 0){
        let fix: Datas = Datas()
        fix.id = "\(fixid[0].id)"        // 原本的 id
        fix.name = fixTextField.text!    // 依 TextField.text 做变化
        fix.age = fixid[0].age           // 原本的年龄
        try! realm.write {realm.add(fix, update: .all)}
    }
    else{ alertTrigger();print("目前没资料!") }
    reloadData() // 更新 TableView
}

  • 列出资料
@IBAction func findData(_ sender: UIButton) {
    let show = realm.objects(Datas.self)
    if Int(findTextField.text!) ?? 0 > 0 && Int(findTextField.text!)! < show.count+1 && show.count > 0{
        // 在本地端印出资料
        print("name:\(show[ Int(findTextField.text!)!-1].name),age:\(show[Int(findTextField.text!)!-1].age)")
    }
    else{ alertTrigger();print("输入值有误") }
}


明天会介绍:

  1. Table View Cell
  2. UITableViewDelegate、UITableViewDataSource、UITextFieldDelegate

敬请期待!


<<:  Day26 ( 游戏设计 ) 猴子接香蕉

>>:  NoSQL Transaction

予焦啦!Hello World 与 Uart 机制观察

本节是以 Golang 上游 7ee4c1665477c6cf574cb9128deaf9d009...

Docker云端:NextCloud

没按到储存键先手贱按到F5 只想说笔电的调高亮度为甚麽要跟F5设计在一起啊 但小雨一想到今天是第30...

DAY04随机森林演算法(续1)

昨天,我们把基尼系数算完,那今天,我打算建立bagging算法函数: 对於有n个资料的资料集,我们取...

2021 Updated CIS-SIR Exam Questions

Want to pass the CIS-SIR exam on your first attem...

Day 26 - 当AI有了常识之後, 超越人类? -GAN(2)

常被用的GAN比喻,假钞制作(生成目标样本)需要详细研究被伪造钞种的特徵(训练样本数据的特徵),然後...