본문 바로가기

Project/MovieClip

에러 발생 - 데이터 모델 누락

📌 에러 분석

error: dataCorrupted(Swift.DecodingError.Context(
    codingPath: [CodingKeys(stringValue: "results", intValue: nil), 
                 _CodingKey(stringValue: "Index 17", intValue: 17), 
                 CodingKeys(stringValue: "original_language", intValue: nil)], 
    debugDescription: "Cannot initialize OriginalLanguage from invalid String value pt", 
    underlyingError: nil))

 

🔍 에러 메시지 해석

  • dataCorrupted → JSON 디코딩 과정에서 예상하지 못한 값이 들어온 경우 발생
  • CodingKeys(stringValue: "results") → results 배열 내부의 데이터에서 문제가 발생
  • Index 17 → results 배열의 17번째 요소에서 오류 발생
  • CodingKeys(stringValue: "original_language") → original_language 필드에서 오류 발생
  • Cannot initialize OriginalLanguage from invalid String value pt"original_language" 필드에서 pt 값을 예상한 타입으로 변환할 수 없음

 

🚀 원인 분석

아마 original_language 필드를 enum으로 정의했고, JSON에서 받은 "pt" 값이 enum에 정의되지 않음

enum OriginalLanguage: String, Codable {
    case en
    case es
    case fr
    case de
}

 

❌ 위 코드에서는 pt(포르투갈어)가 enum에 없기 때문에 디코딩 중 오류가 발생함.

 

 

🛠 해결 방법

✅ enum에 unknown 추가 

enum OriginalLanguage: String, Codable {
    case en
    case es
    case fr
    case de
    case pt  // 포르투갈어 추가
    case unknown  // 새로운 언어가 들어오면 기본적으로 unknown 처리
    
    init(from decoder: Decoder) throws {
        let container = try decoder.singleValueContainer()
        let value = try? container.decode(String.self)
        self = OriginalLanguage(rawValue: value ?? "") ?? .unknown
    }
}

 

✅ 이제 pt와 같은 미등록 언어가 들어와도 .unknown으로 처리됨.