2009-08-31 14 views
12

Mam niestandardowy plik ikony (MyApp.icns) skonfigurowany dla mojej aplikacji Cocoa. Jak uzyskać dostęp do reprezentacji ikony z poziomu mojej aplikacji w wersji NSImage?Jak mogę załadować reprezentację NSImage ikony dla mojej aplikacji?

Coś następujące byłby idealny:

NSImage * iconImage = [MyApplication defaultIconAsImage]; 

Ale jestem pewien, że to nie jest że proste :)

mogę oczywiście uzyskać ścieżkę do ikony plik następująco:

NSString * iconPath = [[NSBundle mainBundle] 
         pathForResource:@"MyApp" ofType:@"icns"]; 

Ale wydaje mi się, że powinien istnieć jakiś standardowy sposób, aby uzyskać dostęp do plik ikony aplikacji, oprócz wywoływania go po nazwie, ponieważ nazwa może się zmienić.

Jaki jest właściwy sposób na zrobienie tego?

Odpowiedz

36
+7

Czy jesteś poważny? O jej. Zamierzam powiesić głowę ze wstydem. Dziękuję za to. –

+0

genialny !!!!!!!!!!!! – SpaceDog

+1

Nazwany NSApplicationIcon w konstruktorze interfejsów –

15

Tylko dla kompletności - W ten sposób można uzyskać ikonę dowolnej aplikacji lub pliku w systemie.

NSImage *iconImage = [[NSWorkspace sharedWorkspace] iconForFile:@"path"]; 

Przepuścić ścieżkę do pakietu aplikacji dla ikony aplikacji lub ścieżki do pliku dla ikony powiązanej z plikiem.

+0

Dobrze wiedzieć. Dziękuję –

+0

"i" powyżej myli mnie zdanie na temat ścieżek, ponieważ widzę tylko jeden parametr - "iconForFile", a nie dwa. Czy możesz wyjaśnić to trochę więcej? – Volomike

+1

@Volomike Tak, to trochę zagmatwane. Sądzę, że Abizern oznaczał "lub", a nie "i" – Mark

5

Należy pamiętać, że nie zwraca poprawnej ikony po wklejeniu niestandardowej ikony do aplikacji. Potem trzeba zrobić:

NSString* appPath = [[NSBundle mainBundle] bundlePath]; 
NSImage* appIcon = [[NSWorkspace sharedWorkspace] iconForFile:appPath]; 

(kod referencyjny ikona dok napisałem na chrom: http://src.chromium.org/svn/trunk/src/chrome/browser/ui/cocoa/dock_icon.mm)

+0

idealne! Uratowałeś mi bekon. – SpaceDog

+0

Jest to również dobre, jeśli chcesz uzyskać wszystkie dostępne reprezentacje, ponieważ '[applicationIconImage] NSApp' wydaje się zwracać tylko 1. –

Powiązane problemy