2009-04-25 3 views
15

C/C++의 날에 정말로 나를 매달아 놓은 언어의 일부가 포인터였습니다. 당연히 이해합니다.프록시 객체에 대해 이야기하는 인터페이스 빌더에 대한 이해하기 쉬운 지침 (코코아, Xcode 등을 처음 사용)이 있습니까?

이제 인터페이스 빌더 프록시 객체 또는 Interface Builder를 사용하는 방법과 주어진 XIB에 대한 .XIB 창 (파일 소유자, 첫 번째 응답자 등이 포함 된 창)을 넣는 방법에 대해 알아보십시오.

저는 Xcode 예제와 웹에서 발견되는 책과 샘플에서 많은 예제를 거쳤습니다. 그들은 도움이되었지만, 나는 여전히 약간의 상실감을 느낍니다.

IB를 이해하는 것이 Mac/iPhone/iPod touch 응용 프로그램을 작성하는 방법을 이해하는 데 매우 중요하다고 생각합니다.

지금까지 다음과 같은 리소스를 통해 갈 : 맥 OS X 실용적인 프로그래머 자원에 대한 아론 힐레 가스 '코코아 프로그래밍 : 엑스 코드에서 생산성되기 (스크린 캐스트) 코코아 프로그래밍 오브젝티브 C 2.0 (screncast)에서 코딩 첫 번째 iPhone 애플리케이션 작성 (스크린 캐스팅) iPhone SDK 개발

나는 Apple의 Interface Builder 사용자 가이드를 계속 읽었습니다.

제안 된 팁/리소스를 제공해 주시면 감사하겠습니다.

+0

파일 소유자에 대한 설명 : http://crazyviraj.blogspot.com/2009/05/cocoa-what-is-files-owner-in-nib.html – psychotik

답변

44

첫째, 자리 표시자는 여기에 프록시보다 나은 단어입니다.

일반적으로 NIB/XIB 파일에 개체가있는 경우 NIB 파일을로드하면 해당 인스턴스가 만들어집니다. 자리 표시 자 개체는 NIB 파일을로드 할 때 이미 존재하는 개체로 NIB 내부에 나타나므로 NIB를로드하여 생성되는 개체와 이미 존재하는 개체를 연결할 수 있습니다.

파일 소유자, 첫 번째 응답자 및 응용 프로그램이 모두 위치 표시 자입니다.

파일의 소유자는 펜촉을로드 할 개체의 자리 표시 자입니다. 모든 NIB로드 메소드는 'owner'매개 변수를 사용합니다. 파일의 소유자와 연결하면 런타임에 설정되면 nib로드 메소드에 전달 된 소유자 객체에 연결됩니다. 많은 UIKit 및 AppKit 클래스가 nib로드 메소드를 호출합니다. NSApplication, NSViewController, NSWindowController, UIApplicationUIViewController 모두 NIB 파일을로드합니다. 그들이 할 때 그들은 자신을 소유주 매개 변수로 닙로드 메소드에 전달합니다. 그래서 뷰 ​​컨트롤러 나 윈도우 컨트롤러를 사용할 때 파일의 소유자를 하위 클래스로 설정하고 뷰와 파일 소유자 사이의 연결을 대부분 만듭니다.

NSApplication 인스턴스는 [NSApplication sharedApplication]의 간단한 자리 표시 자입니다. 이것은 글로벌 싱글 톤이며 Interface Builder의 아이콘은 글로벌 싱글 톤을 나타냅니다. NIB 파일을로드하면 두 번째 NSApplication 인스턴스가 만들어지지 않습니다.대조적으로, NIB 파일에 창이 포함되어있는 경우, 12 번로드하면 12 개의 창 인스턴스가 있지만 여전히 NSApplication 인스턴스가됩니다.

첫 번째 응답자는 고유합니다. 액션을 첫 번째 응답자에 연결한다는 것은 액션이 시작되면 응답 체인에 동적으로 보내야한다는 것을 의미합니다. 응답자 체인은 일반적으로 포커스 된 뷰로 시작하여 뷰 계층 구조를 따라 계속 진행하며 일부 컨트롤러와 대리자가 포함됩니다. 체인의 각 객체는 액션을 처리하는 데 필요한 샷을 얻습니다. 메뉴 항목은 반응 체인과 잘 작동합니다. "굵게 만들기"메뉴 항목에 현재 선택된 텍스트를 굵은 글씨로 나타내려면, NSApplication 하위 클래스에 연결하면됩니다. 그런 다음 "굵게 만들기"의 모든 상황을 알아야합니다. "적용되며, 어떻게 처리 할 것인가. 텍스트보기와 편집 가능한 웹보기는 "굵게"를 처리하기 위해 다른 코드를 필요로하며이 객체를 모두 하나의 객체에 병입하면 매우 복잡해지며 확장 성이 떨어집니다. 대신 첫 번째 응답자에서 "굵게 만들기"메뉴 항목의 작업을 makeBold: 작업에 연결할 수 있습니다. 즉, 메뉴 항목을 선택하면 포커스가있는 객체 또는 부모 중 하나가 makeBold:에 응답 한 경우 makeBold: 메시지가 표시됩니다. 이제 많은 클래스가 makeBold: 메서드를 구현하고 포커스가있을 때이 메뉴 항목에 응답 할 수 있습니다.

+0

설명해 주셔서 대단히 감사합니다. 그것은 책과 애플의 문서에 있어야합니다! 그게 내가 필요한 것. 나는 지금 그것을 얻는다. – VesperDEM

+0

BTW, 존 (Jon)이 IB 및 NIB 파일에 관해 권위있는 것으로 말한 것은 무엇이든 가져 가야합니다. – NSResponder

+0

@NSResponder 이유는 무엇입니까? –

1

"파일 소유자"(nib/xib가로드 될 때 연결됨)를 제외하고 IB에서 만드는 객체는 프록시 객체가 아닌 실제 객체입니다.

기존 예제 코드를 통해 IB가 어떻게 작동하는지 확인할 수 있습니다. 읽은 문서/자습서에 혼란스러운 내용이 있습니까? "조금은 잃어버린"일로 많은 것을하기가 어렵습니다.

+0

내가 읽은 모든 것은 File 's 소유자, 첫 번째 응답자 및 응용 프로그램은 모두 프록시 개체입니다. 나머지는 최상위 개체라고합니다. 참조하고 있던 아이콘이있는 창을 Nib 문서 창이라고합니다. 제 질문에 언급했듯이, 저는 꽤 많은 자료를 읽었습니다. 아주 단순한 단일 창 응용 프로그램을 만들었 기 때문에 "조금"손실되었습니다. 그 모든 멋진 것들. 하나의 XIB에 얼마를 넣을지를 알면 문제가 발생하기 시작합니다. 사용자 가이드는 모든 것이 무엇인지 알려주지 만 모범 사례는 알려주지 않습니다. – VesperDEM

+0

또한 여기에서 게시물은 일부 서식을 제거합니다. 나는 내가 봤던 자원에 관한 단락을 줄 단위로 구분했다. 분명히,이 사이트는 게시물에 캐리지 리턴을 좋아하지 않습니다. 적어도 하나의 CR이 있어야합니다. – VesperDEM

+1

응용 프로그램은 응용 프로그램 객체에 항상 연결된다는 점에서 조금 다릅니다. 첫 번째 응답자는 독점적으로 IB 개념이 아니며 메시지를 응답자 체인에 전달합니다. (어떻게 작동하는지 이해가되지 않는다면 그것에 대해 읽어보십시오.) 어쨌든 XIB 당 하나의 창과 하나 이상의 컨트롤러가 일반적입니다. 메모리 사용을 위해 오브젝트의 압축을 푸는 시간과 거래하고 있습니다. 다시 말하지만, 실제 앱을 둘러보고 취향을 발전 시키십시오. 의견에 형식 지정에 대한 지원이 없다는 의견이 있으면 (동의 함) 페이지 하단의 "항상 환영받는 의견"링크를 클릭하십시오. –

1

애플은 여기에 인터페이스 빌더 NIB/XIB 파일에 먼저 응답자응용 프로그램 자리 개체를 발견 파일의 소유자, 설명은 다음 문서를 가지고 Interface Builder User Guide: Placeholder Objects

귀하의 질문에 애플의 인터페이스 빌더 문서를 읽으면서 언급했지만, 이것을 미래에 참고할 수 있도록 여기에 게시하십시오. 또한 질문이 처음으로 제기 된 이후로 문서가 업데이트되었으므로 그 이후로 문서를 더욱 분명하게 만들 수 있습니다.