본문 바로가기

Project/MovieClip

에러 발생 - 예상치 못한 데이터 값 발생

📌 에러 분석

에러 메시지를 보면 Swift.DecodingError.dataCorrupted가 발생

ailed to fetch data: dataCorrupted(Swift.DecodingError.Context(
    codingPath: [CodingKeys(stringValue: "results", intValue: nil),
                 _CodingKey(stringValue: "Index 10", intValue: 10),
                 CodingKeys(stringValue: "known_for_department", intValue: nil)],
    debugDescription: "Cannot initialize KnownForDepartment from invalid String value Directing",
    underlyingError: nil))

 

🔍 에러 메시지 해석

  • dataCorrupted → JSON 디코딩 중 예상하지 못한 값이 들어와 발생하는 오류.
  • CodingKeys(stringValue: "results") → results 배열 내부의 데이터에서 문제가 발생.
  • Index 10 → results 배열의 10번째 요소에서 오류 발생.
  • CodingKeys(stringValue: "known_for_department") → "known_for_department" 필드에서 오류 발생.
  • Cannot initialize KnownForDepartment from invalid String value Directing→ "known_for_department" 필드에서 "Directing" 값을 예상한 타입으로 변환할 수 없음.

 

🚀 원인 분석

known_for_department 필드를 enum으로 정의했음.

그런데 JSON에서 "Directing" 값이 들어왔지만, enum에 "Directing"이 포함되지 않아서 오류가 발생

 

🔷 기존 enum 정의

❌ 아래 코드에서는 "Directing"이 enum에 없기 때문에 디코딩 중 오류가 발생

enum KnownForDepartment: String, Codable {
    case acting = "Acting"
    case writing = "Writing"
    case production = "Production"
}

 

 

🛠 해결 방법

✅ 1. enum에 "Directing" 추가

enum KnownForDepartment: String, Codable {
    case acting = "Acting"
    case writing = "Writing"
    case production = "Production"
    case directing = "Directing" // ✅ 새 값 추가
}

 

 

✅ 2. unknown 케이스 추가 (모든 예상치 못한 값 처리)

🔥 새로운 값이 추가될 가능성이 크다면, unknown 케이스를 추가하면 안전

enum KnownForDepartment: String, Codable {
    case acting = "Acting"
    case writing = "Writing"
    case production = "Production"
    case directing = "Directing"
    case unknown  // ✅ 새로운 값이 들어오면 기본적으로 unknown 처리

    init(from decoder: Decoder) throws {
        let container = try decoder.singleValueContainer()
        let value = try? container.decode(String.self)
        self = KnownForDepartment(rawValue: value ?? "") ?? .unknown
    }
}