위와 같은 뷰를 구성해서 텍스트 필드에 문자 입력 후 `코어 데이터에 저장` 버튼을 누르면 코어데이터에 저장하고 `저장된 정보들 프린트` 를 하면 말 그대로 저장되어있는 정보들을 프린트 할 예정이다
1. 프로젝트 생성
코어데이터 체크박스 해제 후 프로젝트 생성
2. Data Model파일 생성 및 기본 세팅 (기본 세팅은 이전 게시글 참조)
3. CoreData를 관리할 객체 생성
import Foundation
import CoreData
class CoreDataManager {
//싱글톤 생성
static let shared = CoreDataManager()
//이전 게시물에는 AppDelegate에 생성되어있던 persistentContainer를 이곳에 생성
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Model")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
//NSManagedObjectContext가져오기 (위에 만들어진 persistentContainer의 context반환)
var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
//entity 가져오기 (forEntityName은 coredata model파일에서 만들어준 entity의 이름)
var textEntity: NSEntityDescription? {
return NSEntityDescription.entity(forEntityName: "Text", in: context)
}
//NSManagedObject 생성, 값 세팅 및 저장
func saveTextValue(textModel: TextModel) {
guard let textEntity = textEntity else {
return
}
//생성
let managedObject = NSManagedObject(entity: textEntity, insertInto: context)
//값 세팅
managedObject.setValue(textModel.text, forKey: "text")
managedObject.setValue(textModel.textCount, forKey: "textCount")
//저장
do {
try context.save()
} catch {
print(error.localizedDescription)
}
}
func fetchData() -> [Text] {
//코어데터에서 가져온 데이터를 저장할 빈 배열 생성
var texts: [Text] = []
//fetch를 통해 데이터 가져오기
do {
texts = try context.fetch(Text.fetchRequest()) as [Text]
} catch {
print(error.localizedDescription)
}
return texts
}
}
4. 코어데이터를 사용할 곳에서 위 싱글톤 객체를 이용해 사용하기
class ViewController: UIViewController {
@IBOutlet weak var myTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
}
//textField에서 저장할 데이터 가져오기
func getText() -> TextModel? {
guard let text = myTextField.text else {
return nil
}
return TextModel(text: text, textCount: text.count)
}
//코어데이터에 위에서 반환되는 TextModel 저장하기
@IBAction func touchSaveButton(_ sender: UIButton) {
guard let textModel = getText() else {
return
}
CoreDataManager.shared.saveTextValue(textModel: textModel)
}
//코어데이터에서 데이터 가져와서 프린트 하기
@IBAction func touchPrintButton(_ sender: UIButton) {
let texts = CoreDataManager.shared.fetchData()
for (index, text) in texts.enumerated() {
print("\(index)-----------------")
print("text : \(text.text ?? "")")
print("count : \(text.textCount)")
}
}
}
결과
참고자료
https://velog.io/@leeesangheee/Core-Data-%EC%82%AC%EC%9A%A9%ED%95%B4-CRUD-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0
'이전 블로그 글' 카테고리의 다른 글
220621 TIL [CoreData 사용 방법 - 3(update & delete)] (블로그 이전 포스팅) (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 |