Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos NSWorkspace`图标(forFileType:`返回默认图标_Macos_Appkit_Nsimage_Nsworkspace - Fatal编程技术网

Macos NSWorkspace`图标(forFileType:`返回默认图标

Macos NSWorkspace`图标(forFileType:`返回默认图标,macos,appkit,nsimage,nsworkspace,Macos,Appkit,Nsimage,Nsworkspace,NSWorkspace.shared.iconforFileType的文档:状态: 注: 如果操作失败,则返回默认图标 如何判断操作是否失败,是否返回默认图标 有没有一种方法可以在不进行昂贵的图像或数据比较的情况下确定是否恢复默认图标?快速测试后,看起来当iconForFileType失败时,它每次都返回相同的指针。这很有意义,因为它可能只是对该无文件类型的图像插入一个单一的共享引用 因此,您可以使用已知的未知文件类型获取该指针一次: // Do this once, at program st

NSWorkspace.shared.iconforFileType的文档:状态:

注:

如果操作失败,则返回默认图标

如何判断操作是否失败,是否返回默认图标


有没有一种方法可以在不进行昂贵的图像或数据比较的情况下确定是否恢复默认图标?

快速测试后,看起来当iconForFileType失败时,它每次都返回相同的指针。这很有意义,因为它可能只是对该无文件类型的图像插入一个单一的共享引用

因此,您可以使用已知的未知文件类型获取该指针一次:

// Do this once, at program startup for example, and keep the reference
NSImage* x = [[NSWorkspace sharedWorkspace] iconForFileType:@".this_is_not_a_file_type"];
然后只需进行指针比较:

NSImage* y = [[NSWorkspace sharedWorkspace] iconForFileType:@".xxx"];
NSLog(@"%p %p", x, y);

if (x == y)
    // `iconForFileType` failed

经过快速测试后,看起来当iconForFileType失败时,它每次都返回相同的指针。这是有意义的,因为它可能只是对无文件类型的图像插入一个共享引用

因此,您可以使用已知的未知文件类型获取该指针一次:

// Do this once, at program startup for example, and keep the reference
NSImage* x = [[NSWorkspace sharedWorkspace] iconForFileType:@".this_is_not_a_file_type"];
然后只需进行指针比较:

NSImage* y = [[NSWorkspace sharedWorkspace] iconForFileType:@".xxx"];
NSLog(@"%p %p", x, y);

if (x == y)
    // `iconForFileType` failed

如果iconforFileType:操作失败,NSWorkspace扩展将返回nil:

extension NSWorkspace {

    func iconOptional(forFileType fileType: String) -> NSImage? {
        let icon = self.icon(forFileType: fileType)
        let iconDefault = self.icon(forFileType: "") // "Returns a default icon if the operation fails."
        return icon === iconDefault ? nil : icon
    }

}

如果iconforFileType:操作失败,NSWorkspace扩展将返回nil:

extension NSWorkspace {

    func iconOptional(forFileType fileType: String) -> NSImage? {
        let icon = self.icon(forFileType: fileType)
        let iconDefault = self.icon(forFileType: "") // "Returns a default icon if the operation fails."
        return icon === iconDefault ? nil : icon
    }

}

我尝试过这个…我正在与指向public.item图标的指针进行比较,public.item是基本UTI并返回默认图标…但该图标指针不等于未知文件类型的指针。但是,如果像您的回答一样,我将我的控件图标设置为随机/错误文件类型,而不是public.item,那么该相等就起作用了o很快就会出现这种情况。与public.item类似,其他UTI/文件类型(如public.image)也会返回对同一默认图标的唯一引用。因此,除了指针比较之外,我还必须添加某种重复数据消除过程。我尝试过这一点……我正在与public.item图标的指针进行比较,它是基本UTI,并返回e默认图标…但该图标指针不等于未知文件类型的指针。但是,如果像在您的回答中一样,我将我的控件图标设置为随机/错误文件类型,而不是public.item,那么该相等就起作用了!在这个问题上说得有点太早了。与public.item一样,其他UTI/文件类型(如public.image)也会返回对相同的默认图标。因此,除了指针比较之外,我还必须添加某种重复数据消除过程。Kmdemfshascustomicon聚光灯索引可能是一个键Kmdemfshascustomicon聚光灯索引可能是一个键