【问题标题】:Redisplay changed custom icon in Icon view(IKImageBrowserView) in Finder在 Finder 的图标视图(IKImageBrowserView)中重新显示更改的自定义图标
【发布时间】:2012-01-03 11:51:23
【问题描述】:

我正在使用NSWorkspace 类的setIcon:forFile:options: 方法为文件和​​目录设置自定义图标。我的问题是,Finder 在重新启动之前不会反映图标视图中的图标更改。

图标视图:

列表视图(大纲视图):

【问题讨论】:

    标签: objective-c cocoa nsworkspace


    【解决方案1】:

    来自Carbon development tips and tricks

    您需要向 Finder 发送一个 kAESync AppleEvent 并传递一个 已更改文件的别名。

    以下代码由JWWalker编写

    OSStatus    SendFinderSyncEvent( const FSRef* inObjectRef )
    {
        AppleEvent  theEvent = { typeNull, NULL };
        AppleEvent  replyEvent = { typeNull, NULL };
        AliasHandle itemAlias = NULL;
        const OSType    kFinderSig = 'MACS';
    
    OSStatus    err = FSNewAliasMinimal( inObjectRef, &itemAlias );
    if (err == noErr)
    {
        err = AEBuildAppleEvent( kAEFinderSuite, kAESync, typeApplSignature,
            &kFinderSig, sizeof(OSType), kAutoGenerateReturnID,
            kAnyTransactionID, &theEvent, NULL, "'----':alis(@@)", itemAlias );
    
        if (err == noErr)
        {
            err = AESendMessage( &theEvent, &replyEvent, kAENoReply,
                kAEDefaultTimeout );
    
            AEDisposeDesc( &replyEvent );
            AEDisposeDesc( &theEvent );
        }
    
        DisposeHandle( (Handle)itemAlias );
    }
    
        return err;
    }
    

    【讨论】:

    • 这和调用NSWorkspace的noteFileSystemChanged:方法类似吗?
    • 间歇性地,它失败了。也许我应该尝试这个序列。 PS,我似乎无法@提及你。
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2012-08-18
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多