2014-11-16 1 views
0

OSX에서 코코아 프로젝트를했습니다. 이를 위해 Appdelegate의 수업을 변경해야했습니다. 두 단계로이 작업을 수행했습니다. 먼저 새로운 appdelegate 클래스 (아직 NSApplicationDelegate 프로토콜을 구현하지 않았 음)를 구현하고 작동하고 컴파일했는지 확인했습니다. 새 클래스에서는 이미 applicationDidFinishLaunching 메서드를 구현했습니다. 모든 것이 여전히 괜찮았다!OSX에서 AppDelegate 클래스 변경

그런 다음 프로토콜 구현을 변경했습니다. 나는 옛 Appdelegate에서 prorocol을 제거하고 새로운 Appdelegate에 그것을 삽입했다. 이 단계가 끝난 후에도 모든 것이 잘된 것처럼 보였습니다! 응용 프로그램이 컴파일되고 작동해야합니다. 그러나 다소 회의적 이었기 때문에 새로운 클래스와 오래된 클래스에 로그 문을 삽입했습니다.

이것을 삽입 한 후에도 응용 프로그램이 이전 appdelegate를 계속 사용했음을 알았습니다. 명백하게, 오래된 appdelegate의 이름이 아직도 알려져있는 무언가가 있습니다! 하지만 그게 어디 있니? 아니면 내 목표에 도달하기 위해 다른 것을해야합니까? 아무도 내가해야 할 일을 알고 있니?

답변

0

두 가지 일이 발생해야합니다. 1) 새 클래스의 인스턴스를 인스턴스화해야합니다. 2) 해당 인스턴스는 응용 프로그램 개체의 delegate 속성 (인스턴스 NSApplication 또는 하위 클래스)에 할당되어야합니다.

일반적인 Mac 앱에서이 두 가지 작업은 MainMenu NIB에서 수행됩니다. 해당 NIB에는 해당 클래스의 동결 건조 인스턴스가 포함되어 있습니다. NIB를 처음부터 만들려면 객체 라이브러리 (파란색 큐브)를 NIB 문서로 드래그합니다. 기본적으로 이는 NSObject의 인스턴스를 나타냅니다. 그런 다음 클래스를 선택하고 새로운 App Delegate 클래스로 변경할 Identity 관리자를 불러옵니다. NIB를 처음부터 만들지 않으므로 NIB에는 이미 개체가 있습니다. 그것을 선택하고 클래스를 변경할 수 있습니다.

응용 프로그램 개체의 delegate 속성에 할당하는 다른 단계는 NIB의 응용 프로그램 개체에 대한 자리 표시 자의 delegate 콘센트를 개체에 연결하여 수행됩니다. 다시 말하지만, NIB를 처음부터 만들지 않으므로 이미 완료되었습니다.

요약하면 MainMenu NIB에서 앱 대리인 객체의 클래스를 변경하기 만하면됩니다.


업데이트 :

enter image description here

+0

당신의 대답은 내가 또한 IB에서 "개체를"이름이 바뀐 것을 언급하는 것을 잊었다, 생각 나게 : 다음은 변경해야 할 무엇의 스크린 샷입니다. 누락 된 부분은 대리자 속성을 할당하는 것입니다. 아쉽게도 새 클래스에는 대리자 속성이 없습니다. 그래서 내가 무엇을해야하니? – usermho

+0

죄송합니다. 파일의 소유자가 새 객체에 할당 된 대리인 속성 (콘센트)을 가지고 있습니다. btw, 파일 소유자가 NSApplication – usermho

+0

객체의 이름을 바꾸는 것은 클래스를 변경하는 것과 다릅니다. –