2

我编写了一个为某些文件设置自定义图标的应用程序,但是由于创建这样的图标非常昂贵,我想测试之前是否已经设置了自定义图标。对于自定义图标,我的意思是一个不是 OS X 设置的默认图标的图标。特别是,我可以为具有相同类型的不同文件设置不同的图标。

我已经尝试过检查[NSURL resourceValuesForKeys:[NSArray arrayWithObjects:NSURLCustomIconKey,NSURLEffectiveIconKey,nil] error:nil],但是与之关联的对象NSURLEffectiveIconKey总是非零,NSURLCustomIconKey即使我调用它似乎也是零[NSURL setResourceValue:myNonNilImage forKey:NSURLCustomIconKey error:nil]

顺便调用[[NSWorkspace sharedWorkspace] setIcon:myImage forFile:myFilename options:0]似乎是更改 Finder 中显示的图标的唯一方法。

4

2 回答 2

2

NSURLCustomIconKey 总是返回 nil 因为没有实现对这个键的支持。标题中提到了这一基本信息,但 NSURL 文档中没有。在支持之前,获取此信息的一种方法是通过已弃用的文件管理器方法:

- (BOOL)fileHasCustomIcon:(NSString *)path {
    FSRef ref;
    FSCatalogInfo info;

    if (FSPathMakeRef((const UInt8 *)[path fileSystemRepresentation], &ref, NULL) == noErr) {
        if (FSGetCatalogInfo(&ref, kFSCatInfoFinderInfo, &info, NULL, NULL, NULL) == noErr) {
            FileInfo *fileInfo = (FileInfo *)(&info.finderInfo);
            return (fileInfo->finderFlags & kHasCustomIcon) != 0;
        }
    }

    return NO;
}
于 2013-05-21T22:57:09.800 回答
0

NSWorkspace的文档说setIcon:forFile:options:如果成功则返回 YES。

有了这些信息,您可以简单地切换一个 NSUserDefault 布尔值。这是我使用的一些代码:

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"iconImageSaved"]) {
    if ([[NSWorkspace sharedWorkspace] setIcon:myImage forFile:myFilename options:0])
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"iconImageSaved"];
}

希望这可以帮助

于 2013-04-19T20:29:22.167 回答