2016-07-27 3 views
2

엘로! 저는 Mac 용 메모 응용 프로그램에서 언어로 swift를 사용하고 있습니다. 현재 저장 및로드 기능을 사용하고 있으며 오류를 해결하기 위해 실행 방법을 잘 모르겠습니다. 문제가되는 코드는 다음과 같습니다.Xcode 7 스위프트 2 오류 : 스레드 1 : EXC_BAD_INSTRUCTION (코드 = EXC_1386_INVOP, SUBCODE = 0X0)

import Cocoa 

class NoteViewController: ViewController { 

    @IBOutlet weak var notefield: NSTextField! 
    @IBOutlet weak var savenamefield: NSTextField! 
    @IBOutlet weak var loadnamefield: NSTextField! 

    @IBAction func save(sender: AnyObject) { 
     // The line below gets the error: Thread 1: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0 
     NSUserDefaults.standardUserDefaults().setObject(notefield.stringValue, forKey: savenamefield.stringValue) 
    } 


    @IBAction func load(sender: AnyObject) { 
     var name = loadnamefield.stringValue; 
     var lnote = NSUserDefaults.standardUserDefaults().objectForKey(name) 
     notefield.stringValue = lnote as! String 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do view setup here. 
    } 

} 

무엇이 잘못 되었나요?

+0

대단히 사랑 스럽네요 * 예기치 않은 발견 nil ... * 오류. 아웃렛이 Interface Builder에 연결되어 있습니까? 두 번째 생각 :'lnote'는'load' 메소드에서'nil'입니다. 그런데'NSUserDefaults'에 전용'stringForKey' 메소드가 있습니다. – vadian

+0

나는 stringforkey에 대해 몰랐다. 나는 그것을 시도 할지도 모른다. 추천 주셔서 감사합니다! –

+0

문서를 읽는 데 상처를주지 않습니다 ;-) 발견 할 비밀이 있습니다 ... – vadian

답변

0

나는 그것을 알아 냈다. 몇 가지 테스트를 통해 필자는 notefield.stringValue를 코드에 추가 할 때까지 모든 것이 작동 함을 발견했습니다. 그런 다음이 윈도우를 다른 창으로 만들었다는 것을 깨달았습니다. 코드는 3 개의 다른 창을 덮고 있으며 그 중 2 개는 팝업입니다. notefield는 주 창에서 코드 안에있는 유일한 요소입니다. 나는 모든 요소를 ​​같은 창으로 옮기고 전체를 다시 기록했다. 다음 코드를 사용하여 정상적으로 작동하게되었습니다.

이 코드는 지침으로 만 제공합니다. 주어진 도움에 감사드립니다.

관련 문제