1
我正在使用setIcon:forFile:options:
方法NSWorkspace用於設置文件和目錄的自定義圖標的類。我的問題是,Finder不會在圖標視圖中反映圖標更改,直到重新啓動。在Finder中的圖標視圖(IKImageBrowserView)中重新顯示已更改的自定義圖標
圖標視圖:
列表視圖(大綱視圖):
我正在使用setIcon:forFile:options:
方法NSWorkspace用於設置文件和目錄的自定義圖標的類。我的問題是,Finder不會在圖標視圖中反映圖標更改,直到重新啓動。在Finder中的圖標視圖(IKImageBrowserView)中重新顯示已更改的自定義圖標
圖標視圖:
列表視圖(大綱視圖):
從Carbon development tips and tricks。
您需要發送一個kAESync AppleEvent到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;
}
寫這類似於調用NSWorkspace的'noteFileSystemChanged:'方法? – radj 2017-01-26 09:02:40
@radj是它的相似。它對你有用嗎? – 2017-01-27 04:11:20
間歇性地失敗。也許我應該嘗試這個序列。 PS,我似乎無法提供你。 – radj 2017-01-27 07:11:16