1

Mac用のココアアプリケーションを開発しています。アプリケーションを使用して、ファイルとフォルダーにオーバーレイアイコンを適用しています。しかし、私の問題は、ファイルまたはフォルダーのアイコンをアプリケーションから変更すると、Finderでファイルまたはフォルダーをクリックしない限り、それがFinderに反映されないことです。Finderを更新するために、アプリケーションの次のコードを使用して次のAppleScriptを実行しています。

NSString *source=[NSString stringWithFormat:@"tell application \"Finder\" to update POSIX file \"%@\"",itemPath];
NSAppleScript *run = [[NSAppleScript alloc] initWithSource:source];
[run executeAndReturnError:nil];

しかし、このコードは私のFinderを更新していません。ファイルまたはフォルダのアイコンをすぐに反映するようにFinderを更新する方法はありますか?前もって感謝します...

4

4 に答える 4

2

Finderで文字列を使用する場合は、クラス(folder、file、disk、item、...)を指定する必要があります。itemはすべて(folder、file、...)で機能します。

それがなければ、それは一部の人にとってはうまくいきますが、すべての人にとってはそうではありません

また、 Finderの「 posixfile thePath」は、括弧を使用すると信頼性が高くなります。

これを試して

NSString *source=[NSString stringWithFormat:@"tell application \"Finder\" to update item (POSIX file \"%@\")",itemPath];

またはNSApplescriptなし:

[[NSWorkspace sharedWorkspace] noteFileSystemChanged: itemPath];
于 2012-05-18T21:05:59.300 に答える
0

@"tell application \"Finder\" to update POSIX file \"%@\""このスクリプトは私にとってはうまく機能しています。
アップルイベントを使用することもできます。
以下のコードは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;
}
于 2012-05-18T18:59:30.280 に答える
0

必要に応じて「Finderを更新」する方法は次のとおりです。多分それはあなたを助けるでしょう;)

tell application "Finder"
    tell window 1 to update items
end tell
于 2012-05-18T22:55:12.857 に答える
0

私にとってうまくいったのは、ファイルを「タッチ」することです。これにより、ファイルの変更日が更新され、Finderによるサムネイルアイコンの更新がトリガーされます。

NSString* path = "/Users/xx/...path_to_file"
NSString* command = [NSString stringWithFormat:@"touch \"%@\"", path];
int res = system(command.UTF8String);
于 2019-08-08T11:03:21.243 に答える