2010-02-04 3 views
1

Cocoa NIB 파일이 사용자 지정 컨트롤러 개체의 인스턴스를 인스턴스화 할 때 해당 사용자 지정 컨트롤러 인스턴스에 할당 된 변수의 이름은 무엇입니까? 수동으로 해당 클래스의 인스턴스를 만든 경우 명확하지 않다 경우코코아 : NIB 파일로 만든 인스턴스의 var 이름은 무엇입니까?

, 당신은 할 것 "myVar에"펜촉이 무대 뒤에서 이렇게 사용하고있다의

MyControllerClass *myVar = [[MyControllerClass alloc] init]; 

은 무엇 동등한?

+0

무엇을하려고합니까? 당신이 잘못된 방향으로 가고있는 것일 수 있습니다. 행운을 빕니다! – kubi

답변

2

일단 앱이 컴파일되면 변수 이름 같은 것은 없으므로이 질문은별로 의미가 없습니다. 귀하의 예제에서 myVar은 프로그래머를위한 편리한 레이블 일 뿐이며 일단 소스 코드가 바이너리 코드로 컴파일되면 어떤 식 으로든 존재하지 않습니다.

오브젝트를 nib 파일에두면 오브젝트가 런타임에 아카이브되고 아카이브 해제됩니다. nib 파일에 보관 된 객체에 대한 참조를 얻으려면 콘센트를 사용해야합니다. 즉, nib 파일에있는 클래스에 IBOutlet 인스턴스 변수를 선언하고 연결합니다 인터페이스 빌더에서 참조하려는 펜촉의 오브젝트에 대한 콘센트. 인스턴스 변수는 예제에서 선언 한 스택 변수와 다르며 런타임에 참조 할 수 있습니다.

일반적으로 펜촉을 "소유하고있는"개체가 있습니다. 일반적으로 펜촉은 NSWindowController 또는 NSViewController의 인스턴스로로드되고 창 또는보기 컨트롤러는 nib 파일에 파일 소유자으로 표시됩니다. 창 /보기 컨트롤러에 콘센트를 선언하면 Interface Builder에서 File 's Owner에서 개체로 콘센트를 연결할 수 있습니다.

따라서 명확하게하기 위해 동일한 펜촉에있는 다른 객체의 펜촉에있는 객체에 대한 참조가 필요합니다.

@interface SomeOtherObject : NSObject 
{ 
    IBOutlet SomeObject* anObject; 
} 
@end 

이 인터페이스 빌더에서, 당신은 다음 첫 번째 SomeObject 인스턴스에 SomeOtherObject 인스턴스의 anObject 콘센트에 연결할 수 있습니다 : 그 두 번째 목적은과 같이 인스턴스 변수에 IBOutlet 키워드를 사용하여 출구를 선언합니다. 한 객체에서 다른 객체로 컨트롤 드래그하거나 인터페이스 빌더 속성의 연결 패널에서이 작업을 수행 할 수 있습니다.

그러면 SomeObject 인스턴스를 코드의 변수 이름 anObject으로 참조 할 수 있습니다.

2

컨트롤러 클래스에 awakeFromNib 메서드를 구현하십시오 .- 펜촉의로드가 끝나면 즉시 호출되며 컨트롤러 인스턴스는 "self"변수에서 찾을 수 있습니다. tedge @

+0

좋은 옵션입니다. 확실히 설명하기 쉽습니다 ... –

0

(나는 당신의 대답에 코멘트를 할 수 없습니다) : 시작에 코코아 조금 학습자

당신이 명확하게 할 수 있습니다. Apple Currency Converter 튜토리얼을보십시오.

awakeFromNib 메서드를 기존 ConverterController 클래스에 구현합니다. (내가 곧 배울 것입니다!)

응용 프로그램이 시작되고 ConverterController 인스턴스가 자동으로 인스턴스화됩니다.

awakeFromNib은 실행중인 인스턴스 (사용 준비가되어있는 것 외에는)에 대해 무엇을 알려줄 것입니까? 그리고 "self"가이 정보를 누설하는 구문은 무엇입니까?

0

... 해당 사용자 정의 컨트롤러 인스턴스에 할당 된 변수의 이름은 무엇입니까?

선언 할 때 그 변수에 부여한 이름은 무엇이든 상관 없습니다.

IB는 변수를 만들지 않습니다. outlet 뒤에있는 것처럼 들리 겠지만, IB가 알고있는 변수를 만들고, 변수를 설정하여 객체를 연결할 수 있습니다.

(실제로 IB에서 콘센트를 만들 수 있으며, 현대 런타임에서는 콘센트가 아예 존재하지 않는 콘센트를 선언해야합니다. 그렇지만 콘센트 만들기 [IB에서] 이름을 지정하십시오.)

0

Nibbles는 코드에서 NIB 파일에서만 정의 된 변수를 참조하는 방법에 대해 혼란 스럽습니다.

그 답은 일반적으로 코드와 NIB에 사용자 지정 컨트롤러 클래스 (또는 대리자 클래스) A가 있고 NIB에 다른 클래스 나 컨트롤러 B 만 정의되어있는 경우에는 A를 가리키는 콘센트를 설정하면됩니다. B. A는 코드에서 어디에서나 사용할 수 있으므로 A를 통해 B에 액세스 할 수 있습니다.

나는이 질문도했다.