Как мне получить значок Mac пользователя?

#objective-c #cocoa #icons #nsimage

#objective-c #cocoa #Значки #nsimage

Вопрос:

Кто-нибудь знает, как с помощью Objective-C и Cocoa получить значок компьютера пользователя (тот, который отображается в разделе «Устройства» и «Сеть» в Finder)? Не значок жесткого диска, а реальный значок устройства пользователя. Он варьируется от значка MacBook до значка Mac Pro и значка монитора смерти на синем экране Windows.

Я пробовал что-то вроде следующих строк:

 NSImage *icon = [[NSWorkspace sharedWorkspace] 
                  iconForFileType: NSFileTypeForHFSTypeCode(kComputerIcon)];
  

Но, очевидно, это просто возвращает один и тот же значок все время. Я также пробовал iconForFile: метод, но я не знаю пути к файлу, который можно использовать в качестве параметра. Кто-нибудь может указать мне правильное направление?

Комментарии:

1. 1 за то, что вы хотя бы сначала попробовали это сами.

Ответ №1:

 [NSImage imageNamed: NSImageNameComputer]
  

Это вернет значок текущего компьютера

Комментарии:

1. блестяще! Существует ли список других строк или констант для этих «именованных» изображений?

2. Полный список именованных изображений можно найти в документации NSImage. Кроме того, для справки, вам, вероятно, следует использовать константу NSImageNameComputer, а не литерал @»NSComputer», поскольку константа — это та, которая фактически предоставляется как общедоступный API.

3. изменил литерал на константу. Вот список всех констант tinyurl.com/m5qcl5

4. @Matt Ball: на самом деле оба имени являются общедоступным интерфейсом; @"NSComputer" литерал должен быть таким, чтобы Interface Builder знал, где находится значок.

Ответ №2:

Другое место для поиска значков:

 /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources
  

Вы можете создавать объекты NSImage с файлами, содержащимися в них, следующим образом:

 [[NSImage alloc] initWithContentsOfFile:@"/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/com.apple.macbook-unibody.icns"];
  

Однако, вероятно, не рекомендуется жестко кодировать значение подобным образом, поскольку Apple может изменить расположение значков. Существует файл под названием IconsCore.h, который содержит множество других постоянных значений, таких как ‘kToolbarDesktopFolderIcon’, который можно использовать следующим образом:

 [[NSWorkspace sharedWorkspace] iconForFileType: NSFileTypeForHFSTypeCode(kToolbarDesktopFolderIcon)];
  

Однако я полагаю, что эти константы работают только в Snow Leopard.

Ответ №3:

Если вы ищете какие-либо другие системные значки, ознакомьтесь с примером проекта Apple под названием «IconCollection». http://developer.apple.com/mac/library/samplecode/IconCollection/listing5.html

Образец поставляется с файлом plist, в котором есть имена и коды для нескольких системных значков, к которым можно получить доступ с помощью;

 OSType code = UTGetOSTypeFromString((CFStringRef)codeStr);
NSImage *picture = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(code)];
  

где codeStr — это строковый код для значка, предоставленного в icons.plist

Комментарии:

1. Теперь на developer.apple.com/library/mac/#samplecode/IconCollection/…