2014-09-14 1 views
1

Swift로 작성된 유니버설 iOS 8 앱으로 모든 기기의 스토리 보드를 공유합니다. 아이폰에서는 잘 돌아 간다. 그러나 iPad에서는 "세부 정보 표시"를 수행하려고하면 충돌이 발생합니다. 특히 내가 체크했을 때 prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)의 구현에서 nil 포인터를 역 참조하려고하면 충돌이 발생합니다. if segue.identifier == "ShowDetail"Swift + Storyboards : iPad에서 segue.identifier 충돌 (iPhone ok)

왜 이런 일이 발생할 수 있는지 생각해보십시오.

답변

1

segue.identifier는 암시 적으로 래핑되지 않은 옵션 인 것으로 보이며 문자열에 대해 식별자를 테스트하려고 할 때 식별자에 이름이 없으면 충돌이 발생합니다.

두 개의 섹 그는 있고 하나는 이름이 있고 하나도없는 경우에 발생합니다. 이름이없는 사람이 테스트를 받으면 충돌이 발생합니다.

스토리 보드에서 모든 지그에 명시적인 식별자 이름을 지정하면 발생하지 않습니다.

+0

'var identifier : String!'과 같이 선언 된 속성은 암시 적으로 unwrapped되지 않습니까? 선언이 어떤 시점에서 변경된 것처럼 느껴지지만 변경을 찾을 수 없습니다. 암시 적으로 래핑되지 않은 표준 옵션으로 선언 된 경우이를 테스트 할 수 있지만 Swift는 적합하다고 생각하지 않습니다. –

+0

놀이터에'var identifier : String!'을 넣고 다른 문자열과 동등성을 테스트하면 에러가납니다. 암시 적으로 unwrapped 된 프로퍼티로 선언 된 어떤 것은 사용하기 전에 값을 가져야 만하고 그 값은 무효가 될 수 없습니다. – Caroline

+0

맞아, 내가 말하는 것은 UIStoryboardSegue가'identifier '를'var identifier : String!'대신'var identifier : String' (비 선택적)으로 선언한다는 것이다. *해야한다). 그러나 실제로는 어떤 경우에는 여전히 'nil'이며, 따라서 문제의 핵심은 선택 사항이 아닌 속성의 값이 아닙니다. –