2014-10-28 5 views
0

오늘 아침에 코드를 실행하는 데 이상한 오류가 발생했습니다. 여기 Swift에서 테스트 한 후 선택적 값의 래핑을 해제하는 동안 오류가 발생했습니다.

fatal error: unexpectedly found nil while unwrapping an Optional value

내 간단한 객체입니다

class FQ { 

    var rating: Float? 
    var phone: String? 

    init(rating: Float?, phone: String?) 
    { 
     self.rating = rating 
     self.phone = phone 
    } 
} 

하지만 내 if 문 (FQ.match() -> FQ?)에서 전무 값을 테스트하고 있습니다 :

let fq: FQ? = FQ.match(self.place!.name, location: self.place!.location) 

if fq != nil && fq!.phone != nil { 
    self.phone.text = fq!.phone 
} else { 
    self.phone.text = "" 
} 

그러나 디버깅 :

Printing description of fq: (project.FQ?) fq = Some {
rating = 6.0999999
phone = "+33 1 53 10 87 19"
}

값이 nil이 아닙니다. 전화 번호로 레이블 값을 설정할 때 디버거가 실패합니다.

내가 이해할 줄 알았는데 선택 사항이지만 그렇지 않은 것 같습니다. 내가 뭘 놓치고 있니?

답변

1

오해의 소지가있는 오류 메시지입니다.

내 콘센트가 내보기에 올바르게 선언되었지만 어쨌든 UI와 컨트롤러 간의 연결이 사라졌습니다. Git 병합 후 일어난 것 같아요.

내 전화 콘센트 변수를 선택하는보기로 레이블을 다시 연결하면 모든 것이 올바르게 작동합니다.

고마워, 막심

0

fq.phone도 선택 사항 인 것으로 나타나므로 self.phone.text (선택 사항이 아닌 것으로 가정)에 할당 할 수 없습니다. 시도 :

self.phone.text = fq!.phone! 
3

당신이 fq이 전무 아니라고 말할 경우에만 예외가 생성 될 수있는 한 곳입니다 :

self.phone.text = fq!.phone 

self.phone하는 UILabel (또는 유사)? 예인 경우 암시 적으로 래핑되지 않은 것으로 가정합니다.

@IBOutlet var phone: UILabel! 

정말 확실하지 않습니까?

+0

나는 그들이 마침내 Objc의 API에서 암시 적으로 풀어 물건을 모두 변환 할 생각을? 그러나 Swift의 최신 버전이 아니라면 이것이 가능한 대답입니다. –

+0

문제점을 발견했습니다. 내 UIlabel은 잘 선언되었지만 병합 중에 콘센트 링크가 사라졌습니다. 내 컨트롤러에 내 레이블을 연결해야만 이제는 정상적으로 작동합니다. 오류 메시지는 약간 혼란스럽고 오도 된 것입니다. – maxwell2022

+0

@AlvinThompson : 사용자 지정보기 컨트롤러, 뷰 등의 UI 구성 요소는 인스턴스화시 생성되지 않기 때문에 항상 (암시 적으로 래핑되지 않은) 선택 사항이며, 변경되지 않을 것으로 생각됩니다. – Antonio