20

나는 iOS에서 왔으며 Cocoa를 배우기 시작했습니다. iOSiPadiPhone에 대한 타겟이 여러 개 있지 않으면 우리는 보통 하나의 창을 가지고 UIViewControllers을 사용하여 화면을 관리합니다. 새로운 화면은 대부분 UIViewController에 매핑됩니다.NSWindowController와 NSViewController의 차이점

그러나 코코아에서 이것은 새로운 화면/창을 NSWindow으로 관리하고 그 하위 구성 요소는 NSViewController으로 관리됩니다. 그래서 여러 창 응용 프로그램이 있다면 각 창마다 NSWindowController을 구분해야합니다.

이 방법이 맞습니까? 아니면 오해가 있습니까?

+0

당신이 여기서 말하지 않은 것은 분명합니다. 당신이 iOS에서 왔고 이제 MacOS에서 프로그래밍 작업을 시작 했습니까? –

+1

iOS 부분에 약간 뒤로 있습니다. 'UIViewController'는'UIWindow'를 관리하지 않습니다 -'UIWindow'는'UIViewController'를 관리합니다. 일반적으로 UIViewController는 한 번에 하나 밖에 없지만 (iOS5에서 자식보기 컨트롤러로 변경됨) UIWindow의 하위 구성 요소입니다. 예를 들어, UIWindow에는 rootViewController 속성이 있지만 viewcontroller에는 window 속성이 없습니다. 이제 OSX를 사용하면 여러 개의 NSWindow를 가질 수 있지만 여전히 NSViewController를 관리합니다. 즉, 계층 구조입니다 : 창> ViewController>보기 – CrimsonDiego

+0

고마워, 그래, 나는 IOS 배경에서 오는거야 :) 내 Mac 응용 프로그램에 여러 개의 별도의 윈도우가 있다고하자. 각 윈도우가 windowController 또는 viewController에 매핑되는 베팅 방식은 무엇입니까? 예를 들어 xCode에서 파일을 두 번 탭하면 새 창이 열립니다. – rustylepord

답변

9

iPhone SDK 및 Leopard SDK를 사용하여 뷰 컨트롤러 또는 NSViewController 및 UIViewController를 도입했습니다. 그들의 이름이 제안하는대로보기를 관리하는 것입니다

보기 컨트롤러는보기를 관리하기위한 것입니다. UI 디자인의 현재 추세는 Single Window, Multiple View입니다. 이것이 의미하는 바는 하나의 창과 그 안에 하나의 창이 있고 다른 목적을 위해 설계된 다양한 뷰 그룹을 서로 바꿔서 교환 할 수 있다는 것입니다. 따라서, View Controller는 잘 정립 된 패턴을 위해 프로그래머를 위해 이것을 처리합니다. 플랫폼이 단일 창 및 다중보기 모델을 기반으로하기 때문에 현재보기 컨트롤러는 iPhone 및 iPod touch 프로그래밍에 매우 중요합니다. 그러나보기 컨트롤러를 사용하는 것이 Mac에서는 매우 인기가 있다고 생각하지 않습니다. NSWindowController와 같은 창 컨트롤러는 어떻습니까? 아이폰과 아이팟 터치 환경에서는 UIWindowController가 존재하지 않는다. 뷰 컨트롤러와 달리 NSWindowController는 문서 기반 프로그램 용입니다. 음, 문서 기반 프로그램은 여러 개의 창을 사용할 수 있습니다. 따라서 NSWindowController는 문서 기반 프로그램을위한 것이라고 생각하는 것이 합리적입니다.

+0

아이폰 개발에서 우리는 일반적으로 UIViewController에 의해 관리되는 새로운 스크린 UIVewController를 광범위하게 사용합니다. 그러나 Mac에서는 이것이 NSWindowController를 통해 수행된다고 가정하는 것이 안전합니까? Apple의 문서를 읽으면 모든 멀티 창 응용 프로그램이 문서 기반 응용 프로그램에 속한다고 가정하는 것 같습니다. 그래서 우리가 xcode와 같은 다중 창 응용 프로그램을 개발한다면, 그것도 기반으로 문서화해야합니까? 공개 된 API에 없다는 것을 알고있는 IOS에도 UIWindowController가 있습니다. – rustylepord

+0

문서 기반 앱이없는 여러 개의 창을 가질 수 있습니다. 예를 들어, 영구 패널/관리자 ... –

1

나는 또한 iOS에서 왔고 얼마 전에 Mac의 코딩을 시작했으며, 대부분 Apple의 문서에서 배우기 시작했습니다.

내 인상은 바탕 화면에 거의 NSViewController이 필요 없다는 것입니다. 하나의 큰 예외는 GarageBand 시작 화면과 같이 탭이 있고 여러 개의보기가있는 창일 것입니다.

대부분의 경우 윈도우 당 하나의 NSWindowController입니다. 먼저 NSWindowNSWindowController (그리고 문서 기반 앱을 만드는 경우 NSDocument)의 관계를 알아보십시오.

일단이 문제가 발생하면 NSViewController으로 실험을 시작하십시오.


UPDATE :스토리 보드의 도입은 Mac 용 너무 애플 리케이션 이후, 애플은 라인에서 더보기 프리젠 테이션 로직의 대부분이 새로운 NSViewController에 이전 NSWindowController에서 마이그레이션 할 것을 기대하는 것 iOS 앱의 구성 방식 나는 정확히 에 대해서 잘 모르겠다. 여기에는이 그려지거나 어떤 종류의 코드가 윈도우 컨트롤러에 남아 있어야하는지 (또는 여전히 서브 클래스 화되어야하는지)에 관한 지식이 없다.

+0

iOS에 여러 개의 창을 가질 수 없기 때문에 지금까지 얻은 노출은 하나의 창에서 여러 개의보기 컨트롤러입니다.하지만 다른 screena로 작업 한 것처럼 보입니다. 화면은 iOS의 Viewcontroller로 표시됩니다. 하지만 Mac OSX에서는 기본적으로 여러 개의 창을 가질 수 있기 때문에 각 창은 창 컨트롤러로 관리되며 뷰 컨트롤러를 포함하여 하위 구성 요소를 관리 할 수 ​​있습니다. – rustylepord