응용 프로그램을 종료하기 전에 iPhone 애플리케이션 상태를 보존하는 방법은 무엇입니까?
-
06-07-2019 - |
문제
탭 바와 내비게이션 컨트롤러가있는 iPhone 응용 프로그램을 개발했습니다.
지금은 잘 작동합니다.
이제 응용 프로그램이 종료하기 전에 상태를 저장하기를 원합니다.
6 개의 탭이 있고 들어오는 호출이 오면 앱을 다시 시작한 후 마지막으로 선택한 탭을 선택해야합니다.
나는이 주제에 대한 몇 가지 질문을 보았지만 그들을 본 후에는 더 혼란 스러웠다.
누구 든지이 작업을 수행하는 직접적인 방법을 말할 수 있습니까?
해결책
"하나의 크기에 맞는"것은 없다.
그러나 좋은 상태 보존 솔루션을 개발하기위한 올바른 길을 가야하는 몇 가지 일반적인 팁과 포인터가 있습니다.
일반적으로 상태를 저장하기 위해 모든 작업을 수행하려고합니다.
applicationWillTerminate:
앱 대의원에서 또는 듣기 위해UIApplicationWillTerminateNotification
다른 수업에서.nsuserDefaults를보십시오. NSUSERDEFAULTS를 사용하여 키/값 쌍을 저장할 수 있지만 (nsDictionary와 유사하지만, nsuserDefaults에서 NSCoding을 구현하는 개체 만 저장할 수 있음) 선호도 또는 기타 정보와 관련하여 저장할 수 있습니다. NSUSERDEFAULTS를 사용하여 상태 정보를 저장하십시오. 한 가지주의 사항 - 많은 양의 데이터를 저장하는 데 NSUSERDEFAULTS를 사용해서는 안됩니다. 이는 응용 프로그램의 출시 시간이 느려 지므로 (값이 시작될 때 값이로드되었으므로).
귀하의 사례에 더 구체적으로 ... 응용 프로그램간에 선택한 탭을 보존하는 것만으로도 구현해야합니다.
applicationWillTerminate:
NSUSERDEFAULTS를 사용하여 선택한 탭 색인을 저장하십시오. 그럼, 당신의applicationDidFinishLaunching:
구현, 해당 NSUSERDEFAULTS 키의 존재를 확인하고 UITABBARCONTROLLER의 선택한 인덱스가 존재하는 경우 저장된 값으로 설정합니다.예를 들어 선택한 탭의 탐색 스택도 복원하려면 탐색 스택을 정확하게 재구성 할 수 있도록 충분한 정보를 저장해야합니다. NSUSERDEFAULTS에 저장 해야하는 정보는 응용 프로그램의 구조와 내비게이션 스택 내에서 View Controller 계층의 반복에 매우 구체적이므로 일반적인 의미에서 정량화하기가 어렵습니다.
응용 프로그램이 닫힐 때 손실되지 않기를 원하지 않는 사용자 데이터를 입력 할 수있는 입력을 포함하여보다 일반적인 탐색 스택을 복원 해야하는 경우 (예 : 사용자가 어떤 종류의 새로운 레코드를 작성하는 경우) 앱 대의원 수준에서 응용 프로그램 상태를 저장하지 않고 뷰 컨트롤러 클래스를 듣는 데 중점을 둡니다.
UIApplicationWillTerminateNotification
그리고 그들 자신의 특정 국가 절약을 수행하십시오. 또한 내비게이션 계층 구조를 복원하기 위해 종료시 뷰 컨트롤러 당 저장된 정보를 사용하기위한 일부 메커니즘을 결정해야합니다. 이것은 필요에 따라 필요하지 않을 수있는보다 복잡한 기술입니다.
불행히도이 답변은 특히 더 일반적이고 복잡한 경우에 대해 약간의 성가신 것입니다. 왜냐하면이 질문에 대한 일반적인 해결책은 응용 프로그램 구조에 크게 의존하기 때문에이 질문에 대한 일반적인 해결책이 없기 때문입니다.
다음은 nsuserDefaults를 사용하는 예입니다. http://robertcarlsen.net/2009/06/19/overly-simplistic-saving-in-of-for-iphone-847