2014-09-30 5 views
1

저는 iOS 프로그래밍에서 새로운 기능으로 사용자 기본값에서 값을 가져 오려고했습니다. 몇 가지 환경 설정이 있는데 이것들을보기 컨트롤러에서 가져 오려고합니다. viewDidLoad() 함수에 있습니다. 내가했는데 "fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)" 모든 디폴트 값이 없었기 때문에, 그래서 나는 그것을 입력 :치명적인 오류 : 기본값을 가져 오는 동안 선택 값을 언 래핑하는 동안 예기치 않게 nil이 발견되었습니다.

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
    let strName : NSString = defaults.objectForKey("name_preferences") as NSString 
    let strEmail : NSString = defaults.objectForKey("mail_preferences") as NSString 
    let strUser : NSString = defaults.objectForKey("user_preferences") as NSString 

그것은 나를 조언, strName을하자 충돌 :

여기 내 코드입니다. 그러나 여전히 실패하고 있습니다. 아무도 도와 줄 수 있습니까?

+0

어디서 참조 할 기본값을 입력 했습니까? –

답변

1

이렇게하면 사용자 기본값에 strName을 찾을 수 없습니다. 이 시도 :

let var0 = defaults.objectForKey("key0") as? NSString 
let var1 = defaults.objectForKey("key1") as? NSString 
let var2 = defaults.objectForKey("key2") as? NSString //... and so on 
if let strName = var0 { 
    //use strName 
} 
if let strEmail = var1 { 
    //use strEmail 
} 

을 코드가 올바르게, 당신이 할 수있는 중첩 if let 검사를 작동하려면이 모든 사용자의 기본 설정에 존재해야합니다. 그렇지 않은 경우에는 nil 일 수있는 값에 대해 조건문을 사용해야합니다.

항상 사용자의 키에 대해 올바른 유형의 개체가 있는지 확신 할 수 없으므로 사용자 기본값에서 벗어나는 모든 작업에이 작업을 수행해야합니다.

편집 :

설명 : as 키워드를 입력 주조에 사용됩니다. 당신은 그것에 대해 here 읽을 수 있습니다.

as?은 선택 사항으로 변환되므로 as?을 사용하여 유형에 값을 변환하면 값이 nil이거나 캐스트 할 수없는 경우에도 코드가 작동합니다. 나중에 if let 문을 사용하여 선택 사항을 확인하여 값이 0이거나 포함되어 있는지 확인할 수 있습니다.

관련 문제