앱을 백그라운드로 보내고 다시 실행되었을 때 최초 실행 뷰가 아닌 종료되기 전 뷰가 보이도록 상태를 보존하고 또 입력중이던 메시지가 있으면 그대로 보존 및 복원되도록 해보자.




상태 보존과 복원을 하기 위한 애플리케이션 설정을 하자. AppDelegate.swift 파일에 아래와 같이 메소드를 추가하자.


func application(application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool {

        return true

}

    

    func application(application: UIApplication, shouldSaveApplicationState coder : NSCoder) -> Bool {

        return true

}





다음으로 아래 사진과 같이 스토리보드의 뷰컨트롤러를 클릭하고 아이덴티티 인스펙터를 열고 Restoration ID 에 복원할 아이디를 입력한다.

이렇게 하면 두개의 탭뷰가 있다고 했을때 두번째 탭뷰를 클릭하고 종료한 후 다시 실행하면 두번째 뷰가 복원되어 실행된다.






텍스트뷰에 입력한 값을 보존하기 위해 해당 컨트롤러에 아래와 같은 코드를 추가한다.(텍스트뷰를 추가하고 컨트롤러에 연동하는 과정은 생략한다.)

아래의 코드를 입력하면 텍스트 입력중 종료하고 다시 실행했을 때 입력중이던 텍스트가 복원되면서 실행된다.


override func encodeRestorableStateWithCoder(coder: NSCoder) {

        coder.encodeObject(myTextView.text, forKey: "UnsavedText") // myTextView는 텍스튜뷰를 컨트롤러에 IBOutlet 으로 연동할때 생성한 이름이다.

        super.encodeRestorableStateWithCoder(coder)

}

    

    override func decodeRestorableStateWithCoder(coder: NSCoder) {

        if let decodeObj = coder.decodeObjectForKey("UnsavedText") {

            myTextView.text = decodeObj as! String

        }

        super.decodeRestorableStateWithCoder(coder)

}






위의 
코드는  "핵심만 골라 배우는 ios 9 프로그래밍 (닐스미스 지음/ 황반석 옮김)" 에 있는 예제를 참고하여 작성하였습니다.

+ Recent posts