내 앱의 한 화면에서 (모델에서) 저장하고 사용자가 동일한 페이지로 다시 이동하는 경우 검색하려는 데이터 문자열이 있습니다. 지금은 데이터가 모델에 잘 저장되어 있지만 컨트롤러의 새 인스턴스를 생성하는 화면으로 돌아올 때마다 나타나는 것처럼 보입니다. 따라서 내 모델은 내 참조가 손실되어 (현재 내 컨트롤러에 인스턴스 변수로 저장되어 있기 때문에) 좋지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까?iOS 앱의 화면간에 데이터를 유지하는 방법은 무엇입니까?
답변
내가 뭘 잘못하고 있니?
일반적으로 문서 또는 응용 프로그램에서 공유되는 모델 (개체 컬렉션 일 수도 있지만 반드시 하나 일 필요는 없음)이 있습니다. 뷰 컨트롤러가 생성되면 모델 (또는 모델의 일부)에 대한 참조가 제공됩니다. 그런 다음 다른보기 컨트롤러를 만들면 해당 모델에 대한 참조가 해당 객체로 전달됩니다. 따라서 모델은 모든 뷰 컨트롤러에서 공유됩니다. 다른 컨트롤러가 뷰 컨트롤러를 알고 있기 때문에보기 컨트롤러가 할당 해제 된 경우 모델은 잊지 않습니다.
모델의 시작 부분이있는 것처럼 들리지만 단일보기 컨트롤러로 제한됩니다. 어쩌면 다른 뷰 컨트롤러 중 일부와 동일한 상황이 발생했을 수도 있습니다. 모든 작은 모델을 어떻게 큰 오브젝트 그래프로 묶을 수 있는지 생각해보십시오. 이렇게하면 기억하기가 더 쉬울뿐만 아니라 앱 위임자 또는 루트보기 컨트롤러와 같은 단일 개체에 전체 모델을 저장해야 할 책임이 있습니다.
이와 같이 소량의 데이터를 저장하는 데 가장 적합한 저장소 메커니즘 인 NSUserDefaults를 사용하여 모델 데이터를 디스크에 유지해야하는 것처럼 들립니다.
당신이 고려할 수 적어도 다음과 같은 몇 가지 옵션이 있습니다
앤드류 말했듯이- 는 NSUserDefaults를 통해 디스크에 데이터를 유지.
- 싱글 톤 디자인 패턴을 사용하여 응용 프로그램의 수명 동안 데이터를 유지할 데이터 "관리자"개체를 만듭니다.
- 왜보기 컨트롤러의 새 인스턴스가 생성되는지 (코드에 따라 명백하거나 분명하지 않을 수 있음) 알아보고보기 컨트롤러를 재사용하기 위해 약간 다르게 작업을 시도하십시오 (단순하거나 당신의 코드가 주어지면 어렵다.)
내 의견에 설명 된 스토리 보드를 사용하고 있다면 실제로하고 싶은 것은보기 컨트롤러의 탐색 패턴을 변경하는 것이 아니라면 옵션 2를 고려할 것입니다.
컨트롤러를 탐색 컨트롤러 스택에 밀어 넣으면 계속 유지됩니까? 아니면 꺼낼 때 새 인스턴스가 만들어 집니까? – Nosrettap
1) 사용자가 기본값을 사용하는 이유는 무엇입니까? 얼마나 많은 데이터가 있는지 전혀 알 수 없습니다. 디폴트 시스템은 사용하기 쉽지만 많은 사람들이이 방법을 악용으로 사용하는 것을 고려할 것입니다. 2) 부. 3) 컨트롤러를 다 끝냈다가 컨트롤러를 놓아도 아무 이상이 없으며, 컨트롤러를 두지 않아도됩니다. 모델을 지속하는 것이 중요합니다. 뷰 컨트롤러, 아니요. – Caleb
@Nosrettap, 스택에서 컨트롤러를 밀면 이전 스택이 유지됩니다. 스택에서 마지막 스택을 꺼내면 이전 스택은 계속 유지됩니다 (그러나 사용자가 갑자기 닫은 스택이 사라 졌으므로 영구 스토어 (또는 싱글 톤)에 저장하지 않으면 데이터가 사라집니다). – Rob
네비게이션으로보기 컨트롤러를 밀고 다시 돌아 오면 은을 유지합니다. 그러나 여전히 여러 화면에 걸쳐 일부 데이터를 유지하려면 싱글 톤 인스턴스를 사용하는 것이 좋습니다.
- 1. sencha touch2.0의 화면간에 데이터를 전달하는 방법은 무엇입니까?
- 2. 앱의 비밀을 비밀로 유지하는 방법은 무엇입니까?
- 3. 간단한 iOS 앱의 데이터 저장 방법은 무엇입니까?
- 4. iOS 앱의 변수는 무엇입니까?
- 5. iOS 응용 프로그램에서 세션을 유지하는 방법은 무엇입니까?
- 6. iOS 앱의 모든 창을 회전시키는 방법은 무엇입니까?
- 7. 앱의 iOS 버전 배포를 찾는 방법은 무엇입니까?
- 8. Codeigniter에서 플래시 데이터를 유지하는 방법은 무엇입니까?
- 9. 응용 프로그램 데이터를 유지하는 방법은 무엇입니까?
- 10. 전역 변수없이 데이터를 유지하는 방법은 무엇입니까?
- 11. MVC보기간에 데이터를 유지하는 가장 일반적인 방법은 무엇입니까?
- 12. iPhone 앱의 여러보기에서 데이터를 저장하는 방법은 무엇입니까?
- 13. Ad BannerView를 배치하여 TabBar 앱의 모든보기를 유지하는 방법은 무엇입니까?
- 14. iOS 앱의 스패머 차단
- 15. 웹과 iOS 앱의 관계는 무엇입니까
- 16. iOS 앱의 데이터를 원격 데이터베이스에 안전하게 저장하려면 어떻게해야합니까?
- 17. IOS 앱의 이미지 표시 옵션
- 18. ios 앱의 상쾌한 아이콘 표시
- 19. iOS 앱의 색상 도형
- 20. iOS : 앱의 모델 아키텍처
- 21. iOS 앱의 피싱 : 가능합니까?
- 22. iOS 앱의 사진의 해상도
- 23. UITabBarController의 화면간에 정보 공유
- 24. 화면간에 데이터 저장
- 25. 연필 모형 도구로 화면간에 링크를 만드는 방법은 무엇입니까?
- 26. iOS 앱에서 데이터를 공유하는 방법은 무엇입니까?
- 27. 로그인 활동을 유지하는 방법은 무엇입니까?
- 28. iOS 5에서 밝기 변경을 영구히 유지하는 방법은 무엇입니까?
- 29. 백그라운드에서 iphone ios xmpp 연결을 유지하는 방법은 무엇입니까?
- 30. ios 앱의 bdd 테스트를 위해 cedar를 설정하는 방법은 무엇입니까?
매번 컨트롤러를 다시 만들어야합니까? 내 스토리 보드에는 사용자가 원을 그리며 탐색 할 수있는 화살표 원이 있습니다. – Nosrettap
@nosrettap, 그건 당신 문제입니다. 원래 컨트롤러의 다른 인스턴스를 스택으로 밀어 넣으면 안됩니다. 원래 컨트롤러의 원래 인스턴스로 돌아가려면 다른 컨트롤러를 꺼야합니다. – Rob
올바른 방법에 대해 다음 [SO 토론] (http://stackoverflow.com/questions/10544444/memory-not-releasing-with-arc-and-storyboard-in-ios-5-1/10564901#10564901)을 참조하십시오. 스택에서 뷰 컨트롤러를 팝하는 것. – Rob