2017-12-23 13 views
0

사용자가 응답 할 질문이있는 여러 개의보기 컨트롤러가 각각 UIPageViewController에 있습니다. 이 질문에 답을 얻은 후에는 값을 로컬에 저장하여 나중에이 값으로 채워진 PDF를 만들 수 있습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? NSUserDefaults를 사용합니까?UIPageViewController의 하위보기 컨트롤러에서 값을 저장하여 앱의 다른 곳에서 사용하려면 어떻게해야합니까?

+0

내 2 센트 : 단순한 숫자/문자열 true/false 인 4-5 답변과 같으면 UserDefaults를 사용하여 도망 갈 수 있습니다. 그렇다고 평소에는 그렇지 않습니다. 그렇지 않으면 CoreData 구조를 살펴보십시오. –

+2

당신의 업무는 당신이 할 수있는 방식으로 당신의 앱 아키텍쳐를 디자인하는 것입니다. 사용자 기본값 (즉, 영구 저장되는 항목) 인 경우 사용자 기본값을 사용하십시오. 전달할 데이터 일 경우 항상 참조 할 수있는 객체의 인스턴스 속성에 저장합니다. 페이지 뷰 컨트롤러 자체 일 수도 있고 상위가 있거나 상위 위젯 일 수도 있습니다. – matt

답변

1

데이터를 유지하는 방법에 따라 다릅니다. 데이터가 사용자의 삶을 지속 시키려면 앱이 기기에서 삭제 되더라도 데이터베이스 (예 : Realm, CoreData)와 같이 클라이언트에서 앱을 삭제해야합니다. 사용자의 경험을 형성하기 위해 계속 사용할 데이터 인 앱 자체의 수명을 데이터에 유지하려면 UserDefaults을 사용할 수 있지만 그렇게하려는 것은 아닙니다. 그리고 데이터가 앱 인스턴스의 수명을 지속시키기를 원하면 일반 속성에 저장하십시오.

나는 이유가 무엇이든간에 세 번째 옵션을 선택하는 것으로 의심됩니다. 그렇다면, 내가 (모든 페이지 뷰 컨트롤러가 참조 할 수 있음) 부모 뷰 컨트롤러의 인스턴스 속성으로의 모델 객체 ...

class SurveyAnswers { 

    var userName: String? 
    var userAge: Int? 
    var favoriteSauce: PizzaSauce? 
    var livesWithCats: Bool? 

} 

을 만드는 것이 좋습니다 ... 단순히 프로토콜/위임 패턴을 사용합니다 (객체의 동일한 인스턴스를 업데이트하는 경우) 해당 객체의 속성을 업데이트하는 하위 객체의 데이터를 부모 객체로 전달할 수 있습니다. 그런 다음 PDF 파일을 준비 할 준비가되면 하위 뷰 컨트롤러가 속성을 설정 한 해당 개체를 부모에게 요청하십시오.

괜찮 으면이 데이터를 저장하고 검색하는 방법으로 공유 AppDelegate을 사용할 수 있습니다. 나는 이것을 습관에 맞서 버리는 것에 대해주의를 기울이지 만, 전체적으로 당신의 어플리케이션에 따라 이것은 완벽하게 수용 가능한 선택 일 수 있습니다.

일반 규칙 : 대상 개체의 속성을 설정하여 데이터를 전달하고 대리인을 사용하여 데이터를 뒤로 전달합니다.