이전 게시글에서는 CRUD의 creat와 read에 대해서만 다뤘는데 이번에는 update와 delete에 대해 공부하려고 한다
이전 게시글 중 CoreData를 싱글톤으로 사용한 2번 게시물을 기준으로 작성 할 예정이다
(아래 `식별자 지정` 섹션은 업데이트와 삭제를 위해 이전 게시글에서 했던 내용들에 해준 추가 작업이고 그 아래에 작성된 내용이 업데이트와 삭제에 대한 내용
식별자 지정
업데이트를 하기 위해서는 코어데이터에 저장할 때 해당 식별자에 맞는 데이터를 업데이트를 해야하는데 이전에 Create, Read만 할때는 그런 식별자에 대한 생각 없이 모델을 만들어 업데이트를 하는데 어려움이 있었다
- storyboard수정
먼저 id를 입력 받을 textField를 추가로 생성 해줬고 업데이트 및 삭제 버튼을 추가
- DataModel 수정
entity에 id프로퍼티를 추가
코어데이터 프로퍼티 파일로 가서 추가한 프로퍼티를 작성
save할 때 값 세팅 부분에 추가
- 사용할 곳에서의 수정
저장할 때 사용할 객체 수정
id textField의 숫자를 int로 변환 기능 및 id매개변수 추가
프린트 할 내용 추가
저장과 읽기가 잘 되는 모습
saveContext메서드 구현
업데이트와 삭제 기능을 구현하다보니 아래 코드를 자주 사용하게 되었다₩
do {
try context.save()
} catch {
print(error.localizedDescription)
}
그래서 아래와 같이 따로 메서드를 만들어 이용함
private func saveContext() {
do {
try context.save()
} catch {
print(error.localizedDescription)
}
}
Update기능 구현
- CoreDataManer에 updateDate 메서드 추가
func updateDate(textModel: TextModel) {
//fetchData를 통해 저장된 데이터들 불러오기
let datas = fetchData()
//데이터들 중 매개변수로 받은 textModel과 id가 동일 하다면 데이터 변경
for data in datas {
if data.id == textModel.id {
data.text = textModel.text
data.textCount = Int16(textModel.textCount)
}
}
//변경된 데이터 저장
saveContext()
}
- button touch시 id가 일치하는 데이터 업데이트
@IBAction func touchUpdateButton(_ sender: UIButton) {
guard let textModel = getText() else {
return
}
CoreDataManager.shared.updateDate(textModel: textModel)
}
Delete기능 구현
delete도 data를 수정하는 것이 아니라 삭제한다는 점만 빼면 update와 거의 유사하다
-CoreDataManer에 deleteData 메서드 추가
func deleteData(textModel: TextModel) {
//fetchData를 통해 저장된 데이터들 불러오기
let datas = fetchData()
//데이터들 중 매개변수로 받은 textModel과 id가 동일 하다면 데이터 삭제
for data in datas {
if data.id == textModel.id {
context.delete(data)
}
}
//삭제 후 context 저장
saveContext()
}
- button touch시 id가 일치하는 데이터 삭제
@IBAction func touchDeleteButton(_ sender: UIButton) {
guard let textModel = getText() else {
return
}
CoreDataManager.shared.deleteData(textModel: textModel)
}
결과
'이전 블로그 글' 카테고리의 다른 글
220618 TIL [CoreData 사용 방법 - 2(프로젝트 생성 후 설정, 싱글톤)] (블로그 이전 포스팅) (0) | 2023.04.13 |
---|---|
220617 TIL [CoreData 사용 방법 - 1(프로젝트 생성시 설정 및 create & read)] (블로그 이전 포스팅) (0) | 2023.04.13 |
220616 TIL[코드로 테이블 뷰 만들기](블로그 이전 포스팅) (0) | 2023.04.11 |
220614 TIL[코드로 UI구성하기](블로그 이전 포스팅) (0) | 2023.04.11 |