Core data, CRUD 코드

Duna·2021년 7월 22일
0
post-thumbnail

💽 코어데이터


코어데이터 누구세요?
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를 사용해서 데이터를 사용하는 겁니다.
그 때까지 도-약해보겠습니다.🚀🚀

profile
더 멋진 iOS 개발자를 향해

0개의 댓글