我写了一个为某些文件设置自定义图标的应用程序,但由于创建这样的图标非常昂贵,我想测试之前是否已经设置了自定义图标。使用自定义图标,我的意思是一个不是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中显示的图标的唯一方法。
答案 0 :(得分:1)
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;
}
答案 1 :(得分: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"];
}
希望这有帮助