iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
Mobile Development

從零開始的IOS開發日常系列 第 6

[鐵人賽 Day 06] Swift Realm 簡單資料庫

  • 分享至 

  • xImage
  •  

這篇筆記主要是記錄我在入門Realm時做簡單本地資料庫時遇到的問題以及解決方式
Realm的基本指令可以參照這篇:https://hackmd.io/@gary3123/ByEGeM6oq

前置作業

使用Cocoapods來新增、管理Realm套件
詳細可以看這篇:https://hackmd.io/@gary3123/rJR8Tldj5
並繼續使用.xcworkspace檔繼續編輯

Storyboard 拉介面UI

  • TabelView 包含了一個 Cell, Cell 裡面還放了三個 Label ,分別代表了 姓名、年齡、住址,並在螢幕裡置中。
  • 下面分別是對應 姓名、年齡、住址 的 Label 和 TextField , Label 和 TextView 左側對齊,並和其他元件保持相對距離, TextField 同理。
  • 新增 Button 在螢幕裡置中,左右側和上面的 Label 和 TextField 對齊。
  • 最下面的編輯 Button 和 刪除 Button 設定相同大小、並和上面的元件分別左右對齊

開始撰寫程式碼內容

Realm 資料庫建立

我們要先新增一個 Swift 檔,裡面就是撰寫 Realm 資料庫格式及資料儲存的型別。

我設定了四項分別是
uuid : String (設定自動產生)
name : String
age : Int
address : String

並把UUID設定成索引主鍵


設置 TabelView

我們要先去宣告 Cell 的 Label 元件
我建立了一個新的 Swift 檔來存放 Cell 的內容,之後會在顯示 TabelView 的 Function 中用到


回到 ViewController.swift 我們必須先設置 UITableView 委任模式的對象來完善這個 TableView 的內容,先為 ViewController 加上委任需要的協定:


在 viewDidLoad 下面加入 dataSource 、 delegate 來設置委任對象


接下來就是要判段每一次會出現幾個 Cell
我們可以去讀取資料庫的數量來判斷我們要出現幾個 Cell , 因為資料庫內容有可能是無值的狀態,所以我們的realm變數設成可選型別,但function是不能讀取nil的
我就做了 if 判斷的方式
當 realm 是無值的話就 return 0


最後我們要讓他判斷每個 Cell 要顯示的內容
第三行的程式碼主要是取得 tableView 目前使用的 Cell
再將資料庫 table 的內容放到 Cell 內


設置 UIButton 的執行程式碼

新增

為了避免 TextField 在無值的情況下按下新增或年齡輸入字串時會出現錯誤,我把主要的運作程式放在 if 判斷裡面
主要程式就是將 TextField 的值放到 Table 資料庫裡面
最後再將 TableView reload 就行了
按下新增的時候再將 TextField 清空


刪除

這裡是避免 TableView 沒有選取資料時,按刪除出現的錯誤
一樣把主要運作的程式放在 If 判斷裡面就行了
從第四行開始就是主要運作的程式
先用 indexPathForSelectedRow!.row 判斷我選取的是第幾個 Cell
再將判斷的資料放到 tables 裡變成 tables陣列的索引值並放到 del 變數裡
最後在資料庫裡的資料刪除


編輯

編輯的程式和新增的程式很相似
但這裡多了一個程式碼會出錯,必須注意的地方,就是當 TableView 沒有選取資料時,按下編輯,所以我們寫 If 判斷時,要多一個條件
這邊也是利用 indexPathForSelectedRow!.row 判斷我選取的是第幾個 Cell
再取 TextField 的值寫入資料庫裡
最後再將 TextField 的值清空


上一篇
[鐵人賽 Day 05] Swift Realm基本用法
下一篇
[鐵人賽 Day 07] Swift CocoaPods 初入門-1
系列文
從零開始的IOS開發日常30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言