检测Cocoa中是否设置了自定义文件图标
我写了一个为一些文件设置自定义图标的应用程序,但是由于创建这样的图标非常昂贵,我想测试一下以前是否已经设置了自定义图标。对于自定义图标,我指的是一个不是OS X设置的默认图标的图标。特别是,对于具有相同类型的不同文件,我可以有不同的图标 我已经尝试检查检测Cocoa中是否设置了自定义文件图标,cocoa,icons,nsurl,Cocoa,Icons,Nsurl,我写了一个为一些文件设置自定义图标的应用程序,但是由于创建这样的图标非常昂贵,我想测试一下以前是否已经设置了自定义图标。对于自定义图标,我指的是一个不是OS X设置的默认图标的图标。特别是,对于具有相同类型的不同文件,我可以有不同的图标 我已经尝试检查[NSURL resourceValuesForKeys:[NSArray array with objects:NSURLCustomIconKey,NSURLEffectiveIconKey,nil]错误:nil],但是与NSURLEffect
[NSURL resourceValuesForKeys:[NSArray array with objects:NSURLCustomIconKey,NSURLEffectiveIconKey,nil]错误:nil]
,但是与NSURLEffectiveIconKey
关联的对象始终为非nil,NSURLCustomIconKey
即使我调用[NSURL setResourceValue:myNonNilImage forKey:NSURLCustomIconKey错误:nil]
顺便调用[[NSWorkspace sharedWorkspace]setIcon:myImage-forFile:myFilename-options:0]
似乎是更改查找程序中显示的图标的唯一方法。的文档说明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"];
}
希望这有助于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;
}
向我们展示您的真实代码,以便更好地了解当前发生的情况我称之为
[[NSWorkspace sharedWorkspace]setIcon:myImage for File:myFilename选项:0]
每次我加载要设置自定义图标的文件时。问题是如何知道此文件是否已设置图标,以便避免重置。是的。您在问题中粘贴了一些代码片段,您说您尝试过。请发布您尝试过的完整代码,以便我们能够获得一个合理的想法。目前我正在使用<代码>如果([[[[NSWorkspace sharedWorkspace]图标信息文件:myFilename]表示]计数]>4)[[NSWorkspace sharedWorkspace]设置图标:myImage for文件:myFilename选项:0];因为显然myImage只有4个表示形式。但这对我来说似乎是一个糟糕的解决方法。这确实是一个非常糟糕的解决方法。我自己不敢相信它。谢谢你的建议,但这个解决方案对我不起作用,因为我必须为我想要设置图标的每个文件设置默认值,并且图标可能有一个我已经准备好另一台Mac了。非常感谢你,你让我开心!;-)