코어데이터 누구세요?
Apple Developer Documentation - Core Data 🌈
Core Data는 데이터베이스가 아닙니다.
데이터베이스의 역할을 하는 Persistence(SQLite)가 Core Data 기능 중 하나 일 뿐이지요.
Core Data는 넓은 의미로 앱의 모델 계층이며, 객체 그래프를 관리하는 Framework입니다.
코데 어떻게 생겼어요?
코데는 이렇게 RelationShip를 지정할 수 있어요.
지금은 1:多 로 만들어진 모습입니다.
CRUD 코드들 보여주세요!
// create
@discardableResult
func insertContent(content: Content) -> Bool {
let entity = NSEntityDescription.entity(forEntityName: "Contents", in: self.context)
if let entity = entity {
let managedObject = NSManagedObject(entity: entity, insertInto: self.context)
managedObject.setValue(content.title, forKey: "title")
managedObject.setValue(content.content, forKey: "content")
managedObject.setValue(content.date, forKey: "date")
do {
try self.context.save()
return true
} catch {
print(error.localizedDescription)
return false
}
} else {
return false
}
}
// read
func fetch() -> [NSManagedObject] {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Contents")
// sort
let sort = NSSortDescriptor(key: "date", ascending: false)
fetchRequest.sortDescriptors = [sort]
let result = try! context.fetch(fetchRequest)
return result
}
// update
func updateContent(title: String, content: String) {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "Contents")
fetchRequest.predicate = NSPredicate(format: "title = %@", contentTitle)
do {
let test = try managedContext.fetch(fetchRequest)
let objectUpdate = test[0] as! NSManagedObject
objectUpdate.setValue(title, forKey: "title")
objectUpdate.setValue(content, forKey: "content")
objectUpdate.setValue(Date(), forKey: "date")
do {
try managedContext.save()
} catch {
print(error)
}
} catch { print(error) }
}
// delete
func deleteContent(title: String) {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "Contents")
fetchRequest.predicate = NSPredicate(format: "title = %@", title)
do {
let test = try managedContext.fetch(fetchRequest)
let objectToDelete = test[0] as! NSManagedObject
managedContext.delete(objectToDelete)
do {
try managedContext.save()
} catch {
print(error)
}
} catch {
print(error)
}
}
CRUD 코드들 입니다.
CRUD를 하는 방법은 쉬워요! 하지만 그 이상으로 가는 건 어려운 것 같습니다.
지금 제 목표는 RelationShip를 사용해서 데이터를 사용하는 겁니다.
그 때까지 도-약해보겠습니다.🚀🚀