我发现使用IOServiceGetMatchingServices
我的设备,并获得属性字典是这样的:如何在Mac OS X中获取存储设备的图标?
kernResult = IORegistryEntryCreateCFProperties(nextMedia,
(CFMutableDictionaryRef *)&props,
kCFAllocatorDefault, 0);
从该字典我可以提取信息的图标:
NSString *bId = [props valueForKeyPath:@"IOMediaIcon.CFBundleIdentifier"];
NSString *rFile = [props valueForKeyPath:@"IOMediaIcon.IOBundleResourceFile"];
这两个给我这个(作为一个例子):
com.apple.iokit.IOStorageFamily (Bundle identifier) Internal.icns (Resource File)
我尝试使用这种方法提取图标:
NSBundle *bundleWithIcon = [NSBundle bundleWithIdentifier:bId];
NSString *iconPath = [bundleWithIcon pathForResource:rFile ofType:nil];
但是bundleWithIcon
是nil
。
这是甚至正确的方法来获得图标?
我想我必须要以某种方式加载软件包才能加载它bundleWithIdentifier
,我该怎么做?
PS:There's another question哪(我认为)试图要求同样的事情,但只要求捆绑,而不是如果这是正确的方式。
麻烦的是,要查看每个包需要2秒钟。难道不应该让IOKit加载该包,以便有一个我可以访问的实例? – 2009-02-24 08:47:18
您可以简单地在/ S/L/E中实例化所有kext捆绑包,也许在应用完成启动后的几秒钟后台。在你完成之后,只要从I/O Kit获得的包标识符是kext的包标识符,bundleWithIdentifier就可以工作。 – 2009-02-24 18:52:37
启动应用程序需要很长时间,应用程序必须在开始时显示图标。 – 2009-02-25 09:56:35