> NSURLEffectiveIconKey图标读取与finder中的不同
> NSURLCustomIconKey – 返回nil
> NSURLthumbnailKey – 返回nil
> NSthumbnail1024x1024SizeKey – 返回nil
我设法使用NSfileManager读取所有已安装的设备,但我不知道如何读取与设备连接的图标?也许有人有任何想法或暗示.
我也试过用
var image: NSImage = NSWorkspace.shareDWorkspace().iconForfile((url as! NSURL).path!)
但它返回与NSURLEffectiveIconKey相同的图像
谢谢!
解决方法 这个答案是对 Ken Thomases’s Objective-C answer的Swift 1.2的翻译.所有学分都归Ken Thomases所有,这只是他精彩答案的翻译.
let ListBase = LSSharedfileListCreate(kcfAllocatorDefault,kLSSharedfileListFavoriteVolumes.takeUnretainedValue(),NSMutableDictionary())let List = ListBase.takeRetainedValue() as LSSharedfileListvar seed:UInt32 = 0let itemsCF = LSSharedfileListcopySnapshot(List,&seed)if let items = itemsCF.takeRetainedValue() as? [LSSharedfileListItemRef] { for item in items { let icon = LSSharedfileListItemcopyIconRef(item) let image = NSImage(iconRef: icon) // use image ... }}
说明:
在将Ken的答案从Objective-C翻译成试图使用它时,我遇到了一些困难,这就是我做出这个答案的原因.
第一个问题是LSSharedfileListCreate,Swift中的方法签名不接受nil作为其第一个参数.我必须找到代表CFAllocator的常量:kcfAllocatorDefault.并且第三个参数也不接受nil,所以我放了一个假的未使用的NSMutableDictionary来保持编译器满意.
此外,LSSharedfileListcopySnapshot的“种子”参数不接受通常的var种子:Uint32?对于inout,我必须给种子默认值.
为了在使用这些API时决定何时使用takeRetainedValue或takeUnRetainedValue,我参考了this answer.
最后,我不得不将返回的数组转换为LSSharedfileListItemRef元素的Swift数组(最初由编译器推断为CFArray).
更新
这在OS X El CAPItan 10.11中已被弃用(感谢@patmar)
更新2
请注意,虽然它已被弃用,但它仍然有效.现在忽略了在前一个解决方案中作为[LSSharedfileListItemRef]的强制转换,因此我们必须转换为NSArray,然后再投射该项目:
if let items = itemsCF.takeRetainedValue() as? NSArray { for item in items { let icon = LSSharedfileListItemcopyIconRef(item as! LSSharedfileListItem) let image = NSImage(iconRef: icon) // use image ... }}总结
以上是内存溢出为你收集整理的macos – 如何使用Swift在OS X上读取Finder图标(左侧源列表)全部内容,希望文章能够帮你解决macos – 如何使用Swift在OS X上读取Finder图标(左侧源列表)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)