2015-02-06 8 views
2

segue에서 값을 받고 어레이의 특정 요소를 가지고있는 인덱스 번호로 대체하는 코드가 있습니다.치명적인 오류 : 예기치 않게 찾지 못했습니다. 선택 값을 풀 때 (배열에 추가 할 때)

변수의 초기화는 다음과 같습니다

var noteTitles: [String] = ["Sample Note"] 
var noteBodies: [String] = ["This is what lies within"] 
var selectedNoteIndex: Int! 
var newTitle: String! 
var newBody: String! 

나는 지난 3 개 값을 내가 그들이 원하는 값을 만드는 SEGUE 있습니다. viewDidLoad에()에서

,이 있습니다

if newTitle == nil && newBody == nil { 

    } 
    else { 
     println("\(newTitle)") 
     println("\(newBody)") 
     println("\(selectedNoteIndex)") 
     let realTitle: String = newTitle 
     let realBody: String = newBody 
     let realIndex: Int = selectedNoteIndex 
     noteTitles[realIndex] = realTitle 
     noteBodies[realIndex] = realBody 
    } 

내 기록이 보여

New Note Title 
This is what lies within 
nil 
fatal error: unexpectedly found nil while unwrapping an Optional value 

내가 라인에

Thread 1: EXC_BAD_INSTRUCTION(code=EXC_i385_INVOP,subcode=0x0) 

를 얻을 수를

let realIndex: Int = selectedNoteIndex 

누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+1

BTW 스위프트는 유형 유추 된 언어입니다. 시도 해봐 !!! –

+0

대답을 확인하십시오. –

답변

0

다시 기본보기에 segueing 동안, 나는 적절한 언 와인드의 SEGUE을 사용하고 대신 다른를 사용하지 않았기 때문에 나는 이러한 오류를 얻고 있었다 이유는 show segue는 이전에보기 컨트롤러 내에 있던 모든 데이터를 지 웠습니다. unwind segue를 작성함으로써, segue 앞에 값을 자세히 표시하고 오류를 방지 할 수있었습니다.

-1

selectedNoteIndex에 값을 할당하지 않았으므로 nil을 표시합니다. 먼저, 그 값이 0인지 아닌지를 확인해야합니다.

if let selectedNoteIndex = realIndex{ 
    let realIndex: Int = selectedNoteIndex 
} 
+0

그건 선택 바인딩이 사용되는 방법이 아니에요 - 만약에 let realIndex = selectedNoteIndex {...}'시도해보십시오' – Antonio

1

var varName: Type!는 옵션 암시 적으로 풀어 선언합니다.

varName으로 값에 액세스 할 때 즉 varName!을 사용하지 않고 자동으로 래핑되지 않음을 의미합니다.

따라서 암시 적으로 랩핑되지 않은 옵션 selectedNoteIndexlet realIndex: Int = selectedNoteIndex으로 액세스하면 해당 값이 실제로 nil 일 때 가져온 오류가 발생합니다.


애플의 스위프트 가이드 상태가 :

Implicitly unwrapped optionals should not be used when there is a possibility of a variable becoming nil at a later point. Always use a normal optional type if you need to check for a nil value during the lifetime of a variable.