이전 게시글에서는 CRUD의 creat와 read에 대해서만 다뤘는데 이번에는 update와 delete에 대해 공부하려고 한다
위 게시글 중 CoreData를 싱글톤으로 사용한 2번 게시물을 기준으로 작성 할 예정이다
(아래 식별자 지정
섹션은 업데이트와 삭제를 위해 이전 게시글에서 했던 내용들에 해준 추가 작업이고 그 아래에 작성된 내용이 업데이트와 삭제에 대한 내용
업데이트를 하기 위해서는 코어데이터에 저장할 때 해당 식별자에 맞는 데이터를 업데이트를 해야하는데 이전에 Create, Read만 할때는 그런 식별자에 대한 생각 없이 모델을 만들어 업데이트를 하는데 어려움이 있었다
storyboard수정
먼저 id를 입력 받을 textField를 추가로 생성 해줬고 업데이트 및 삭제 버튼을 추가
DataModel 수정
entity에 id프로퍼티를 추가
코어데이터 프로퍼티 파일로 가서 추가한 프로퍼티를 작성
save할 때 값 세팅 부분에 추가
id textField의 숫자를 int로 변환 기능 및 id매개변수 추가
프린트 할 내용 추가
저장과 읽기가 잘 되는 모습
업데이트와 삭제 기능을 구현하다보니 아래 코드를 자주 사용하게 되었다
do {
try context.save()
} catch {
print(error.localizedDescription)
}
그래서 아래와 같이 따로 메서드를 만들어 이용함
private func saveContext() {
do {
try context.save()
} catch {
print(error.localizedDescription)
}
}
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()
}
@IBAction func touchUpdateButton(_ sender: UIButton) {
guard let textModel = getText() else {
return
}
CoreDataManager.shared.updateDate(textModel: textModel)
}
결과
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()
}
@IBAction func touchDeleteButton(_ sender: UIButton) {
guard let textModel = getText() else {
return
}
CoreDataManager.shared.deleteData(textModel: textModel)
}
결과