【问题标题】:Try to set an icon to a file in Cocoa尝试在 Cocoa 中为文件设置图标
【发布时间】:2014-03-19 14:43:55
【问题描述】:

我尝试获取一个文件图标并将其设置回同一个文件(目标是覆盖,但我首先想让这个工作):

NSImage *img=[[NSWorkspace sharedWorkspace] iconForFile:@"MyFilePath"];
NSLog(@"x=%.f",img.size.width); // Result=32
[[NSWorkspace sharedWorkspace] setIcon:img forFile:@"MyFilePath" options:0];

-> 结果是我的文件获得了标准的 Finder 图标,而不是保留自己的图标。有什么我做错了吗?

【问题讨论】:

  • 检查你是否有写权限
  • 是的,我有。并且随着图标向查找器标准图标(而不是向其自身)变化,这意味着权利就在那里。
  • 可能是太小了。我不认为它高档?
  • 尝试将其大小设置为 512x512(使用 [img setSize]),同样的问题。

标签: macos cocoa icons finder nsworkspace


【解决方案1】:

尝试像这样使用它:

[[NSWorkspace sharedWorkspace]
              setIcon: [[NSImage alloc] initWithContentsOfFile:@"MyFilePath"]
              forFile: @"MyFilePath"
              options: 0];

您需要先将图标/图像加载到内存中。

编辑:已更新答案以提供有关以下方面的更多信息 下面的评论。

“如何在重新分配之前将图像保存在内存中以“播放”它?”

从指定路径分配到内存中的NSImage 在加载后几乎可以以任何可能的方式进行操作。您需要彻底阅读NSImage Class Reference 以真正了解它的作用以及如何使用它的方法。对于这种特殊情况,您将希望能够从您加载的图标中分配一个命名变量。

只需对上面的代码进行一项更改即可使其正常工作:

NSImage *iconImage = [[NSImage alloc] initWithContentsOfFile:@"MyFilePath"];

[[NSWorkspace sharedWorkspace]
                setIcon: iconImage
                forFile: @"MyFilePath"
                options: 0];

NSLog(@"iconImage: %@",iconImage);

细微的变化实质上是从NSImage 图标分配变量iconImage;其他一切都保持不变。 NSLog 将让您快速了解与 iconImage 相关的属性 - 您从那里获取它实际上取决于您的编码能力和创造力。

【讨论】:

  • 好的,除了图像被拉伸之外,文件保留了它的图标。但是,由于图标需要叠加,如何在重新分配之前将图像保存在内存中以“播放”它?谢谢。
  • @LaurentCrivello,我已经更新了与您的评论有关的答案:)
  • 谢谢,但这仅在“MyFilePath”是图像时才有效。我使用 .txt 文件进行了测试,结果 iconImage 为 nil。那么如何保留 iconForFile 结果呢?
猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 2011-08-10
相关资源
最近更新 更多