2011-01-15 5 views
4

문서 및 예제 코드를 기반으로 xcode에 정의 된 클래스를 읽고 Interface Builder에서 구성 할 때 클래스를 기반으로하는 객체가 효과적으로 생성된다는 인상을 받았습니다. xib 또는 nib 파일에 저장됩니다. 따라서 객체는 해당 응용 프로그램이 시작될 때 사용할 수 있습니다.Cocoa Interface Builder 객체 초기화

또는 인터페이스 작성기에서 처리하지 않은 클래스의 경우 "new"문과 같은 코드를 명시 적으로 xcode에 써야 관련 객체를 만들고 사용할 수 있습니다.

나를 확인하거나 인터페이스 빌더의 내 매우 순진한 이해를 해결하기보다 더 많은 지식이있는 사람들이 매우 좋은 것입니다 ...

답변

6

이해가 정확하지만 완전하지 않습니다. 예, Interface Builder는 클래스를 인스턴스화하고이를 NIB에 직렬화합니다. 그러나 이러한 객체는 코드에서 자동으로 사용할 수 없습니다.

Xcode를 통해 액세스하려는 각 IB 객체에 대해 IBOutlet 변수를 선언해야합니다. 예 :

IBOutlet NSWindow* mainWindow; // A Reference to your main window 

당신이 인터페이스 빌더를 통해 인스턴스를 사용자 정의 개체의 헤더 파일에이 코드를 넣어 (클래스 목록에 일반 객체를 드래그 한 후 관리자의 ID 탭에서 사용자 지정 개체를하는 설정 수업의 실례가되어야 함). 그런 다음 Interface Builder에서 사용자 정의 객체를 마우스 오른쪽 버튼으로 클릭하십시오. 팝업 창에 IBOutlet에 대한 항목이 표시되어야합니다. 옆의 작은 원에서 (이 예제에서는) 기본 창으로 드래그하십시오. 이제 Xcode의 IB 객체에 대한 참조가 있습니다.

응용 프로그램의 동작 대부분을 정의하는 것은 이러한 연결 (참조 용 IBOutlet 및 메서드 용 IBActions)을 통해 이루어집니다.

+0

자세한 설명을 주셔서 감사합니다. 하지만 또 하나의 질문이 있습니다. "IBOutlet NSWindow * mainWindow;" 위에서 언급 한 예제 문장은 클래스의 "속성"선언이어야합니다. – Stanley

+0

아니요, IBOutlet 키워드를 추가하는 한 ivar 일 수 있습니다. 그렇지 않으면 인터페이스 빌더를 사용하여 링크 할 수 없게됩니다. – Pochi

1

Nib 파일에는 개체 그래프의 보관 된 복사본이 포함되어 있습니다. nib 파일에 저장된 모든 객체의 새로운 인스턴스를 생성하기 위해 NSNib 또는 NSBundle이 알아야 할 모든 것, nib의 바인딩에 기술 된대로 함께 연결되며 속성이 nib에 지정된 값으로 설정됩니다.

전체 프로세스가 자동으로 코코아 콩 생성되지 않습니다 The Object Loading Process

객체에 설명이 아니라 파일을 펜촉 일부 개체 로딩에 대한 응답으로 수요에 생성됩니다. 차이점은 중요합니다. 하나의 객체가 하나의 펜촉을 두 번 이상로드하거나 여러 개의 객체가 동일한 nib 파일을로드하게 할 수 있기 때문입니다.

예를 들어 "File 's Owner"가 단일 UIView 객체를 File 's Owner의 'view'속성에 바인딩하는 UIViewController 인 펜촉을 만들 수 있습니다. 그런 다음 두 개의 서로 다른 UIViewController 하위 클래스 (또는 동일한 UIViewController 하위 클래스의 두 인스턴스)가 동일한 nib 파일을로드하여 각각 UIView의 자체 복사본을 가져올 수 있습니다. 마찬가지로 테이블에 새 셀이 필요할 때마다 새 UITableViewCell을로드 할 수 있습니다.

+0

어제 실제로 3 개의 답변이있었습니다. 이제 2 개만 나열됩니다. 나는 모든 세 가지 대답이 다른 관점에서 좋은 해결책/제안을한다고 생각한다. 그러나 그것은 어제 늦게지고 있었고 나는 제 3의 제안을 완전히 시험 할 시간이 없었다. 어제 본 세 번째 답변을 검색 할 수있는 방법이 있습니까? – Stanley

관련 문제