macos – 如何使用Swift在OS X上读取Finder图标(左侧源列表)

macos – 如何使用Swift在OS X上读取Finder图标(左侧源列表),第1张

概述我尝试阅读有关左侧列表中的finder中显示的图标的信息.我已尝试使用以下选项的NSFileManager > NSURLEffectiveIconKey图标读取与finder中的不同 > NSURLCustomIconKey – 返回nil > NSURLThumbnailKey – 返回nil > NSThumbnail1024x1024SizeKey – 返回nil 我设法使用NSFile 我尝试阅读有关左侧源列表中的finder中显示的图标的信息.我已尝试使用以下选项的NSfileManager

> 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图标(左侧源列表)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1006935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存