[iOS] Realm (2) Update & Delete

린다·2021년 11월 3일
0

Learning iOS

목록 보기
10/13
post-thumbnail

✔️ Update

1. 레코드, Row에 대한 값을 수정하고 싶은 경우

  • 수정하고 싶은 object에 대해 수정하고 싶은 내용을 직접 할당해주면 수정할 수 있다.
let taskToUpdate = tasks[indexPath.row]

try! localRealm.write {
    taskToUpdate.content = "수정한 내용"
    taskToUpdate.diaryTitle = "수정한 제목"
    tableView.reloadData()
}

2. Table의 데이터를 일괄적으로 수정하고 싶은 경우

  • UserDiary 테이블 내용을 배열로 가지고 있는 tasks 변수에 대해 key를 통해 접근하여 모든 값에 대하여 변경해줄 수 있다.
var tasks: Results<UserDiary>!

try! localRealm.write {
    tasks.setValue(Date(), forKey: "writeDate")
    tasks.setValue("새로운 제목", forKey: "diaryTitle")
    tableView.reloadData()
}

3. PK 기준으로 수정할 경우 (권장되지 않음)

➡️ 아예 새로운 객체로 덮어씌우는 느낌, 언급되지않은 내용들은 빈 값으로 채워진다.

try! localRealm.write {
    let update = UserDiary(value: ["_id": taskToUpdate._id, "diaryTitle": "새로운 제목"])
    localRealm.add(update, update: .modified)
    tableView.reloadData()
}

4. localRealm.create를 이용한 수정

  • id를 언급해주지 않으면 해당 내용의 새로운 데이터가 추가된다.
try! localRealm.write {
            localRealm.create(UserDiary.self, value: ["_id": taskToUpdate._id, "diaryTitle": "새로운 제목"], update: .modified)
            tableView.reloadData()
        }

✔️ Delete

데이터를 삭제하는 과정을 구현하는 것은 어렵지 않다.
다음은 테이블뷰에서 스와이프를 통해 해당 row 및 데이터를 삭제하는 코드이다.
localRealm.delete(삭제할 object) 코드를 통해 데이터를 삭제할 수 있다.

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        try! localRealm.write {
            localRealm.delete(tasks[indexPath.row])
            tableView.reloadData()
        }
    }

0개의 댓글