Redisplay изменил пользовательский значок в представлении значков (IKImageBrowserView) в Finder - PullRequest
1 голос
/ 03 января 2012

Я использую setIcon:forFile:options: метод NSWorkspace класс для установки пользовательского значка для файла и каталога.Моя проблема заключается в том, что Finder не отображает изменение значков в представлении значков до перезагрузки.

Вид значка:
enter image description here

enter image description here

Вид списка (контурный вид):
enter image description here

1 Ответ

1 голос
/ 09 марта 2012

От Советы и рекомендации по развитию углерода .

Вам необходимо отправить AppleEvent kAESync в Finder, передав ему псевдоним файла, который был изменен.

Ниже код написан 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;
}
...