2016-09-15 3 views
21

내 코드를 Swift 3으로 변환하는 중 이상한 문제가 발견되었습니다. 지금 당장 (2016 년 9 월 15 일) Xcode 8 (공개 버전)이 종료되었습니다. 코드를 변환 한 후 명백히 이유없이 앱이 다운됩니다.Autolayout 문제 Xcode 8 [_SwiftValue nsli_superitem]

이 자동 레이아웃에 문제가되고 로그가 같은 것을 말한다 :

[_SwiftValue nsli_superitem]: unrecognized selector sent to instance 

어떻게 해결할 수 있습니까? 감사합니다

답변

37

그냥 이상한하지만 작업 솔루션을 알아 낸 :

대신이 일을 :

let views = ["view":aView] 
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "...", options:[], metrics: metrics, views: views)) 

명시 적으로 사전 선언을 :

내가 아는
let views: [String:UIView] = ["view":aView] 
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "...", options:[], metrics: metrics, views: views)) 

, 그것은 이상해하지만 그것은 작동 . 건배

+9

공유해 주셔서 감사합니다. 내게는 선택 사항 인 견해를 푸는 것이었다. 그래서'let views = [ "view": aView!]' –

+0

적어도 당신의 것을 변환합니다. 내 프로젝트 업그레이드는 모든 제약 조건을 완전히 무시합니다. 변경 사항을 되돌리고 3 번 연속으로 재 시도했습니다. 내 고객은 업데이트 된 정보를 얻기 전에 전체 인터페이스를 완전히 다시해야한다는 것을 좋아합니다. – DiggyJohn

+0

@martn_st, 고마워요. 저에게 효과적이었습니다. 내 선언은'@IBOutlet weak aTableView : UITableView! '입니다. 이것은 이미 unwrapped되었음을 의미한다고 생각했습니다. 스위프트 3에서 충분하지 않나요? – Bek

2

swift 3에서는 암시 적으로 unwrapped 된 옵션을 사용하는 방식이 변경되었습니다. 다음의 예를 생각해

let optionalInt: Int! = 1 
let int = optionalInt 
let array = [int, 2] 
print(array) // prints: [Optional(1), Optional(2)] 

을 그래서 그 대신 예상대로 유형 [Int]의 배열을 갖는, 우리는 지금 위의 런타임 오류가 발생 [Int?]을 보유하고 있습니다.


pascalbros의 해결 방법은 내가 배열이나 사전에 점점 예기치 않게 가능한 선택적 항목을 확인하는 것이 좋습니다 것, 명시 적으로 변수의 유형이 문제를 해결 선언하려면,하지만 거기에 무슨 일해야하고, 추론 된 유형을 변경합니다.