2013-08-27 6 views
-1

나는이 이야기에 대해 두 가지 측면을 계속 듣고있다. nsuserdefaults가 가장 좋은 방법은 속성을 사용하는 동안 한 컨트롤러에서 다른 컨트롤러로 데이터를 전달하는 가장 좋은 방법이라고 들었습니다. stackoverflow에 대한 답변을 많이 받았고 이제는 여러분이 생각하는 것이 궁금합니다.하나의보기 컨트롤러에서 다른보기 컨트롤러로 데이터를 전송하는 가장 좋은 방법은 무엇입니까?

+2

귀하의 질문은 너무 일반적입니다. 유효한 옵션은 속성, 사용자 기본값, 공유 모델, 데이터베이스, 파일 시스템의 파일 등입니다. 현재의 문제에 달려 있습니다. – iska

+3

NSUserDefaults가 데이터를 전달합니까? 뭐 ... –

+6

누구나 당신에게 'NSUserDefaults'가 최선의 방법이라고 말한 사람은 잘못입니다. –

답변

1

데이터를 전달하는 가장 좋은 방법은 없지만 실제로 해결하려는 문제에 따라 달라집니다. 즉, dependency injection이 가장 일반적인 것으로, 단순히보기 컨트롤러를 인스턴스화하고 필요한 속성을 설정하는 것입니다.

NSUserDefaults는 뷰 컨트롤러간에 데이터를 전달하는 데 사용해서는 안되며, 응용 프로그램 시작 사이의 상태를 유지하는 방법으로 사용하기위한 것입니다. 아마도 당신은 싱글 톤 객체를 언급하고있을 것입니다.

+0

나는 그 의존성 주입을 매우 부르겠다. depedency injeciton은 대개 하드 코딩 된 기능을 대체하지만 주입으로보다 유연하게 만들어 짐을 의미합니다. 속성이나 init을 통해 뷰 컨트롤러간에 데이터를 전달하는 것은 꽤 똑같지 않습니다. http://en.wikipedia.org/wiki/Dependency_injection –

+0

@JustinMeiners 단순한 의미에서 속성을 다른 값으로 설정할 때 일어나는 일입니다. –

+1

나는 문법이 같더라도 근본적으로 다른 개념과 이상이라고 생각합니다. –

0

응용 프로그램 주위에 정보를 전달하는 데 확실히 NSUserDefaults을 사용할 수 있지만 가능할 때마다 정보를 명확하게 전달하는 것이 더 명확하고 명확합니다.

: 당신은 책 제목의 목록과 선택한 책에 대해 당신에게 세부 정보를 제공합니다 다른 뷰 컨트롤러와 뷰 컨트롤러가있는 경우

예를 들어, 이것은 다른 하나에서 정보를 전달하는 간단한 방법이 될 것입니다

BookDetailsViewController *bookDetailsViewController = [[BookDetailsViewController alloc] init...]; 
bookDetailsViewController.book = selectedBook; 

하나의보기 컨트롤러에는 정보가 있고 다른 컨트롤러에는 정보가 필요하므로 정보가 필요한 위치로 간단히 전달됩니다.

제시된보기 컨트롤러에서 발표자로 정보를 되돌려 야하는 경우, 블록이나 위임을 똑같이 활용할 수 있습니다.

앱에서 정보를 저장하거나 사용해야하는 경우 여기에서 NSUserDefaults 및/또는 싱글 톤이 유용 할 수 있습니다. 일반적으로 정보가 실제로 필요하지 않거나 사용되지 않는 곳에 정보를 넣지는 않습니다.

+0

nsuserdefaults는 사용자가 여러보기 컨트롤러를 거쳐야하고 나중에 이메일에 사용해야 할 필요가 있다고 말하는 것이 좋습니다. –

+0

@TwoFace 아니요 일반적으로 세션간에 영구 저장을위한 것입니다. (사용자가 있던 페이지 또는 사용자 이름 등을 저장하십시오.) –

+2

NO!NSUserDefaults는이를 위해 만들어지지 않았습니다. 이것을 위해 사용하지 마십시오. –

0

응용 프로그램의 다른 위치에서 동일한 데이터에 액세스해야 할 때 공유 모델 객체를 사용하여이를 싱글 톤으로 사용합니다.

개체를 필요로하는 모든 개체는 약한 참조를 보유하고 개체는 속성을 쿼리하기 위해 API를 노출합니다.

또한이 공유 모델에 데이터를 유지해야하는 경우 NSCoding 프로토콜을 구현하고 메서드를 추가하여 파일에 직렬화하십시오.

관련 문제