2009-09-03 9 views
5

Chcę włączyć applicationDidFinishLaunching: w mojego delegata kakaowego. Jak to zrobić? W przypadku iPhone SDK applicationDidFinishLaunching jest już w delegacie aplikacji, ale podczas tworzenia aplikacji mac zauważyłem, że nie ma żadnych.Delegat aplikacji - kakao

Pozdrawiam,

Kevin

Odpowiedz

6
- (id)init 
{ 
    if (self = super init]) { 
     [NSApp setDelegate:self]; 
    } 
    return self; 
} 

Można również zrobić to w konstruktorze Interface; z "Właściciela pliku" w MainMenu.xib, po prostu przeciągnij wylot "delegata" do swojego obiektu. Zamiast tego możesz rozważyć użycie -awakeFromNib.

+2

Brakuje pośrednictwem kątownika wokół 'Super init' i nie wspomnieć, że metoda' applicationDidFinishLaunching: 'muszą być realizowane przez klasę ssame aby to działało. – MKroehnert

20

Od Xcode 3.2 szablon aplikacji Mac jest również dołączony do delegata aplikacji, który ma taką metodę.

Aby ustawić to w projekcie utworzonym przed Xcode 3.2, utwórz nową klasę dla delegata, który będzie instancją. Zazwyczaj nazywam moje "AppDelegate". Zrobisz to, klikając prawym przyciskiem myszy grupę Klasy i wybierając "Dodaj plik", a następnie wybierając szablon pliku podklasy Cocoa NSObject.

Otwórz właśnie utworzony nagłówek (AppDelegate.h). Daj mu dowolne zmienne instancji, które chcesz. Następnie naciśnij Go to Counterpart. To przeniesie Cię do pliku implementacji (AppDelegate.m). Dodaj tutaj swoją metodę instancji applicationDidFinishLaunching:. W przeciwieństwie do iPhone'a jest to metoda obsługi powiadomień, więc zajmuje instancję NSNotification, a nie instancję NSApplication.

Teraz, aby go podłączyć. W grupie Zasoby otwórz MainMenu.nib. Przeciągnij obiekt z okna biblioteki do okna najwyższego poziomu (takiego, w którym znajdują się ikony, na przykład Właściciel pliku i Pierwszy obiekt odpowiadający). Wybierz właśnie utworzony obiekt i otwórz inspektora tożsamości. Ustaw klasę obiektu na AppDelegate, dopasowując nazwę używaną w Xcode. Kliknij prawym przyciskiem właściciela pliku i przeciągnij z gniazda delegate do nowego obiektu.

W Xcode dodaj instrukcję NSLog do swojej metody applicationDidFinishLaunching:. Hit Save All, a następnie Build and Go. Wróć do Xcode i otwórz konsolę Debugger. Jeśli wszystko zrobiłeś dobrze i niczego nie zapomniałem, powinieneś zobaczyć tam wiadomość z logu.

+0

'szablon aplikacji Mac jest również wyposażony w delegata aplikacji, który jest już podłączony, który ma taką metodę." Nie dla aplikacji opartych na dokumentach ... – zakdances

+0

@twojpierwszak: Dobrze. Jeśli chcesz dodać delegata aplikacji do aplikacji opartej na dokumentach (z jakiegoś powodu), musisz wykonać pozostałe instrukcje. –

0

Czy brakowało Ci plików delegatów aplikacji? Wygląda na to, że w skryptach instalacyjnych Xcode występuje błąd (przynajmniej w wersji 3.2.1 w systemie Snow Leopard), który instaluje najnowsze szablony projektów w niewłaściwym folderze. Starszy szablon dla projektu "Cocoa Application" nie zawiera plików delegatów.

Wyjaśniłem, co odkryłem (i jak to "naprawiłem") w poście na blogu o nazwie Fixing the Xcode Project Templates.

Cheers, Graham