위와 같은 뷰를 구성해서 텍스트 필드에 문자 입력 후 코어 데이터에 저장
버튼을 누르면 코어데이터에 저장하고 저장된 정보들 프린트
를 하면 말 그대로 저장되어있는 정보들을 프린트 할 예정이다
프로젝트 생성 코어 데이터 체크
(물론 체크해주지 않고 나중에 추가 해줄 수도 있음)
CoreData 세팅
일단 처음 생성시 파일 이름과 entites들이 비어있는데 이 부분 부터 먼저 수정해주자
(Add Entity 버튼을 통해 추가 가능)
그리고 inspector 부분에 Codegen이라는 항목이 있는데 이 중에서 Manual/None
을 선택한다
(세 가지 항목에 대한 차이 점은 따로 작성 예정)
Editor의 해당 선택지를 클릭 해 코어데이터에서 사용할 클래스를 만들어준다
그리고 변경해준 파일 명을 AppDelegate로 이동하여 수정해준다
(지금은 기본 설정대로 AppDelegate에 만들어졌는데 나중에 CoreDataManager라는 객체를 따로 만들어서 그곳에서 container를 만들어줘도 될듯)
저장 및 불러오기
textField에서 받아온 정보를 3-1에서 만든 모델 타입으로 반환 시켜주기
@IBAction func touchSaveButton(_ sender: UIButton) {
guard let textModel = getText() else { return }
//NSManagedObjectContext가져오기 (현재는 appDelegate에 작성되어있으니 appDelegate 부터 가져오고 거기서 context가져오기
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let context = appDelegate.persistentContainer.viewContext
//entity 가져오기 (forEntityName은 coredata model파일에서 만들어준 entity의 이름)
guard let entity = NSEntityDescription.entity(forEntityName: "Text", in: context) else { return }
//NSManagedObject 생성
let text = NSManagedObject(entity: entity, insertInto: context)
//NSManagedObject 값 세팅
text.setValue(textModel.text, forKey: "text")
text.setValue(textModel.count, forKey: "textCount")
//NSManagedObjectContext에 저장하기
do {
try context.save()
} catch {
print(error.localizedDescription)
}
}
@IBAction func touchPrintButton(_ sender: UIButton) {
//NSManagedObjectContext가져오기 (현재는 appDelegate에 작성되어있으니 appDelegate 부터 가져오고 거기서 context가져오기
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let context = appDelegate.persistentContainer.viewContext
//NSManagedObjectContext에서 data불러오기
do {
let texts = try context.fetch(Text.fetchRequest()) as [Text]
for (index, text) in texts.enumerated() {
print("\(index)-------------")
print("text : \(text.text ?? "")")
print("count : \(text.textCount)")
}
} catch {
print(error.localizedDescription)
}
}
결과