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에 데이터를 저장하면 되는데, 저장하기 위해서 해당 과정이 필요하다.
// 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
}()
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
}
}
let entity = NSEntityDescription.entity(forEntityName: "Person", in: self.container.viewContext)
let person = NSManagedObject(entity: entity!, insertInto: self.container.viewContext)
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)")
}
}
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 사용하기 성공 😝