iOS - CoreData 사용하기

이한솔·2023년 9월 15일
0

iOS 앱개발 🍏

목록 보기
19/49

CoreData 사용하기

1️⃣ Xcode에 Create New Project를 할 때 Storage에 Core Data를 선택해서 생성한다.
기존에 존재하던 프로젝트는 cmd+n 단축키로 Data Model만 추가하면 된다.

그러면 이렇게 파일이 생성된다.

2️⃣ Add Entity를 눌러서 Entity를 만들고 사용할 이름으로 바꿔준다.

3️⃣ Attribute 밑의 + 버튼을 눌러 Attribute를 추가한다.

4️⃣ 필요하다면 relationship을 만들 수도 있다.

5️⃣ Inspector의 Codegen(코드 생성)을 원하는대로 선택해준다.

Manual / None: 관리 객체 하위 클래스의 프로퍼티, 논리를 직접 편집할 때 선택
Class Definition: 생성된 논리나 프로퍼티를 편집할 필요가 없을 경우 선택
Category / Extension: 관리 객체 하위 클래스에 추가적인 메서드나 비즈니스 논리를 추가하고 싶은 경우 선택

Editor - Create NSManagedObject Subclass를 눌러서 클래스 파일과 속성 파일을 선택적으로 만들 수 있다.

그러면 이렇게 파일이 생성된다.

6️⃣ 이제 만들어둔 Entity에 데이터를 저장하면 되는데, 저장하기 위해서 해당 과정이 필요하다.

  1. NSManagerdObjectContext로 Persistent Container를 생성한다.
    처음에 CoreData를 사용하는 프로젝트로 생성했기 때문에 AppDelegate 파일을 보면 해당 코드가 이미 만들어져있다.
    persistentContainer 변수의 NSPersistentContainer(name:) 생성자의 NSManagedObjectModel 이름을 만들어둔 Entity 이름으로 수정해야한다.
  // MARK: - Core Data stack
    lazy var persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "Person")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()
  1. View Controller에 생성한 Persistent Container를 전달한다.
import UIKit
import CoreData

class ViewController: UIViewController {
    var container: NSPersistentContainer!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setContainer()
    }

    func setContainer() {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        self.container = appDelegate.persistentContainer
    }
}
  1. Entity를 가지고 온다.
let entity = NSEntityDescription.entity(forEntityName: "Person", in: self.container.viewContext)
  1. NSManagedObject를 만든다
let person = NSManagedObject(entity: entity!, insertInto: self.container.viewContext)
  1. NSManagedObjectContext에 저장한다.
    func createPerson() {
        let entity = NSEntityDescription.entity(forEntityName: "Person", in: self.container.viewContext)
        let person = NSManagedObject(entity: entity!, insertInto: self.container.viewContext)
        person.setValue("Hansol", forKey: "name")
        person.setValue(25, forKey: "age")

        do {
            try self.container.viewContext.save()
            print("Person saved successfully.")
        } catch {
            print("Failed to save person: \(error.localizedDescription)")
        }
    }
  1. 잘 저장되었는지 확인해본다.
    func printSavedPerson() {
           let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()
           
           do {
               let savedPersons = try self.container.viewContext.fetch(fetchRequest)
               for person in savedPersons {
                   print("Name: \(person.name ?? "Unknown"), Age: \(person.age)")
               }
           } catch {
               print("Failed to fetch persons: \(error.localizedDescription)")
           }
       }

앱을 실행해보면 저장 후 출력되는 것을 확인할 수 있다! CoreData 사용하기 성공 😝

0개의 댓글