2012-11-19 2 views
1

저는 현재 코코아를 배우고 있으며 버튼과 레이블이있는 기본 양식을 얻는 방법에 대한 '일반적인'자습서를 따라 왔습니다. .xib코코아 -보기 처리에 대한 설명

는, 나는 '객체'(NSObject 서브 클래스의 인스턴스)를 추가 한, 또한 내가의 ViewController에 Custom Class를 설정하여 내보기에 연결합니다 ViewController 클래스를 만들었습니다. 그런 다음 ViewController.h.m 파일에 pressedButton 메서드와 레이블 (myLabel)을 추가하여 코딩합니다. 이 모든 작업은 정상적으로 작동합니다 (예 : 버튼을 누르면 레이블이 업데이트됩니다).

내 질문은 : 내가 실제로이 과정을 C++ 용어 (내가 익숙한 언어)로 무엇을하고 있습니까? 내가 이해 한대로 'Object'(ViewController 클래스로 설정)는 .xib 파일의 인스턴스를 나타내며 (여기서는 잘못되었을 수 있음) ViewController 클래스로 설정된이 뷰티 롤러에서 콘센트 및 액션을 만들 수 있습니다. .h/.m, 그러나 나는 아직도 장면 뒤에서 정말로 무엇이 일어나고 있는지 확신하지 못하고있다.

마지막으로 XCode 템플릿은 AppDelegate 클래스에 '무료'를 제공합니다. 내 ViewController 클래스를 통해 내 컨트롤을 관리한다고 가정하면이 파일/개체는 무엇을 위해 사용될 것인가? 뷰 자체와 관련이없는 응용 프로그램 특정 용도 또는 폼의 컨트롤을 관리하는 데에도 사용됩니다. (내가 생각하는 일부 자습서에서 볼 수 있듯이)?

답변

1

나는 귀하의 질문의 첫 부분을 잘 이해하고 있기를 바랍니다. .xib (nib 파일의 xml verison)은 클래스 또는 객체를 나타내지 않습니다. 오히려 모든 하위 뷰 (각 객체)가있는 뷰 객체를 만들고 뷰 컨트롤러에 제대로 링크하는 데 사용됩니다.

가장 일반적이며 자동으로 nib 파일 corersponds의 기본보기가보기 컨트롤러의 관점에서 self.view로 자동 생성됩니다. self.view의 하위 뷰 계층 구조를 탐색하여 nib 파일로 만든 각보기에 액세스 할 수 있습니다. 또는 nib/IB (인터페이스 작성기) 내에서 태그를 정의하여 개별보기 오브젝트에보다 쉽게 ​​액세스 할 수 있습니다.

"편의를 위해"IBOutlets가 소개되었습니다. 보기 컨트롤러의 인터페이스에서 IBOutlet을 정의하고 IB를 사용하여 xib 파일을 사용하여 생성 된 전용 객체에 연결할 수 있습니다. 나는보기 개체를 다룰 수있는 다른 방법을 고려할 때 꼭 필요한 것은 아니기 때문에 "단지 당신의 편의를 위해서"라고 말하고 있습니다. 그러나 그것은 편리함 이상의 것이므로 표준 방법을 강하게 권장하고 적극적으로 권장합니다.

IB를 사용하여 만든 양식 /보기에 프로그래밍 방식으로 추가보기를 추가 할 수도 있습니다. 프로그래밍 방식으로 해당 뷰의 속성을 변경할 수 있습니다.

뷰 컨트롤러는보기 컨트롤러가 initWithNibName:bundle: 메서드를 사용하여 nib 파일로 초기화 될 때 바로 생성됩니다. 그런 다음 nib 파일 (요즘에는 xib)이 열리고 내용이 파싱되어 해석되며 모든보기가 생성되어 각각 수퍼 뷰에 추가되고 속성 및 동작 : 선택기 등이 그에 따라 설정됩니다. 다시 말하지만, 전체 프로세스는 사용자의 편의를 고려하여 설계되었습니다. 프로그래밍 방식으로 모든보기 등을 만들 수도 있습니다 - 모든 nib 파일을 전혀 사용하지 마십시오. 사용자 정의보기 컨트롤러의 loadView 메서드는 동글의 적절한 위치입니다.

두 번째 질문 : AppDelegate는 응용 프로그램의 다양한 작업을 위해 설계되었습니다.보기 컨트롤러에서 모든 것을 잘 관리 할 수 ​​있으면 AppDelegate에서 아무 것도 변경할 필요가 없습니다. 전역 변수의 변수 또는 함수에 대한 컨테이너로 사용되는 경우가 많습니다 (속성 및 앱 대리 객체의 멤버).때로는 application : didFinishLanuncing 또는 applicationDidBecomeActive와 같은 AppDelegates 메소드 중 일부를 재정의해야하는 경우가 있습니다. 엄밀히 말하면, UIApplicationDelegate는 서브 클래 싱하는 클래스가 아닙니다. 그것은 당신이 구현하는 프로토콜입니다. (Java 내에서 인터페이스와 매우 흡사하다. C++에서 익숙한 다중 상속의 부족을 극복한다.)

+0

고맙습니다. Hermmann ... 아주 잘 설명되어 있습니다. Objective-C로 C++에서 생각하는 것을 멈춰야 만한다는 것을 알지만, 병렬을 보는데 도움이됩니다. – Pete855217

관련 문제