카테고리 없음

swift 코어 데이터 저장소에 대해 알아보자

kingarthur 2024. 8. 8. 13:26

일단 내가 코어데이터를 배우면서 코드를 작성할때 이게 어떻게 동작하는건지 궁굼해서 찾아보게 되었다

 

내가 작성한 코드 

func saveContext() {
    if context.hasChanges {
        do {
            try context.save()
        } catch {
            let nserror = error as NSError
            fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
        }
    }
}

상세 설명

  1. context.hasChanges
if context.hasChanges {

 

  • context는 NSManagedObjectContext 객체입니다. 이는 Core Data 스택에서 데이터베이스와 상호작용하는 데 사용됩니다.
  • hasChanges 속성은 컨텍스트에 변경 사항(추가, 수정, 삭제)이 있는지 여부를 나타냅니다. 변경 사항이 있는 경우 true를 반환합니다.
  • 이 조건문은 변경 사항이 있을 때만 저장 작업을 수행하도록 합니다. 이를 통해 불필요한 저장 작업을 방지합니다.

2. do-catch 블록:

do {
    try context.save()
} catch {
    let nserror = error as NSError
    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}

 

 

    • do 블록 안에서 실제로 데이터를 저장하는 코드를 실행합니다.
    • try context.save()는 컨텍스트의 변경 사항을 영구 저장소에 저장합니다. 이 메서드는 오류를 던질 수 있으므로 try 키워드를 사용합니다.
  • 오류 처리:
    • catch 블록:
catch {
    let nserror = error as NSError
    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}

 

 

  • catch 블록은 do 블록 내에서 오류가 발생했을 때 실행됩니다.
  • 발생한 오류를 NSError 객체로 캐스팅하여 더 자세한 오류 정보를 얻습니다.
  • fatalError 함수는 치명적인 오류가 발생했음을 나타내며, 프로그램을 종료합니다. fatalError는 디버깅 목적으로 사용되며, 실제 프로덕션 코드에서는 이보다는 사용자에게 오류를 알리거나 로그를 남기는 등의 적절한 오류 처리 방식을 사용하는 것이 좋습니다.

중요한 점

  • 데이터 저장:
    • Core Data 컨텍스트에 변경 사항이 있을 때만 저장 작업을 수행합니다. 이는 성능을 최적화하고, 불필요한 저장 작업을 피하는 데 도움이 됩니다.
  • 오류 처리:
    • context.save() 메서드는 오류를 던질 수 있기 때문에, do-catch 구문을 사용하여 오류를 처리합니다.
    • fatalError는 개발 중에 발생한 심각한 오류를 디버깅하는 데 유용하지만, 실제 앱에서는 이보다는 사용자에게 친절한 오류 메시지를 보여주거나, 오류를 로깅하는 방식이 더 적절합니다.

예시: saveContext 사용

아래는 saveContext 함수를 호출하여 데이터를 저장하는 예시입니다.

func addContact(name: String) {
    let newContact = Contact(context: context)
    newContact.name = name
    
    saveContext() // 변경 사항을 저장
}

func updateContact(contact: Contact, newName: String) {
    contact.name = newName
    
    saveContext() // 변경 사항을 저장
}

func deleteContact(contact: Contact) {
    context.delete(contact)
    
    saveContext() // 변경 사항을 저장
}

 

위 예시에서는 새로운 연락처를 추가하거나, 기존 연락처를 수정하거나, 연락처를 삭제한 후 saveContext 함수를 호출하여 변경 사항을 저장합니다.

이 함수를 사용하여 Core Data의 변경 사항을 안전하게 영구 저장소에 저장할 수 있습니다.

 

이렇다고 한다. 

fatalError 디버깅 용인지는 처음 알았네. 앞으로 배워야 될게 산더미네요 앞으로도 화팅