Leerer Müllbehälter über Objektiv-C/Kakao
-
26-10-2019 - |
Frage
Ich habe mich gefragt, ob es eine Möglichkeit gibt, den Inhalt des Müllbehälters programmatisch zu entleeren. Ich lösche derzeit Dateien, die sich dort befinden, mit:
NSFileManager *manager = [NSFileManager defaultManager];
[manager removeItemAtPath:fileToDelete error:nil];
Nachdem ich diese Operation verwendet habe, werde ich jedes Mal, wenn ich eine Datei in den Müll ziehe, mit der Nachricht aufgefordert:
Sind Sie sicher, dass Sie "xxxxxxx.xxx" löschen möchten? Dieser Artikel wird sofort gelöscht. Sie können diese Aktion nicht rückgängig machen.
Dies dauert, bis ich mich entweder abgemeldet oder den Mülleimer sudo rm -rf.
Vielen Dank!
Lösung
Sie können Sachen in den Müll legen NsWorkspace, Das Löschen des Mülls ist jedoch für Programme ein Nein Nein Nein. Sie werden also keine API finden. Ihre beste Wahl ist also die Verwendung der Skriptbridge.
Hinzufügen ScriptingBridge.framework
zu Ihrem Build -Ziel und generieren Sie eine Header -Datei für den Finder mit:
sdef /System/Library/CoreServices/Finder.app/ | sdp -fh --basename Finder
Anschließend können Sie den Finder bitten, den Benutzer zu veranlassen, den Müll zu leeren:
#import "Finder.h"
FinderApplication *finder = [SBApplication applicationWithBundleIdentifier:@"com.apple.Finder"];
// activate finder
[finder activate];
// wait a moment (activate is not instant), then present alert message
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[finder emptySecurity:security];
});
Siehe das Scripting Bridge -Dokumentation für mehr Details.
Wenn Sie dies mit Swift versuchen, erhalten Sie nach Xcode 7.3 Linker -Fehler, die versuchen, in finder definierte Klassen zu finden. Sie müssen also eine Objektiv-C-Wrapper erstellen.
Andere Tipps
Sie können versuchen, Apfelkripte zu verwenden, um dies zu tun:
NSString* appleScriptString = @"tell application \"Finder\"\n"
@"if length of (items in the trash as string) is 0 then return\n"
@"empty trash\n"
@"repeat until (count items of trash) = 0\n"
@"delay 1\n"
@"end repeat\n"
@"end tell";
NSAppleScript* emptyTrashScript = [[NSAppleScript alloc] initWithSource:appleScriptString];
[emptyTrashScript executeAndReturnError:nil];
[emptyTrashScript release];