Ich verwende ein UIDocument mit iCloud. Ich verwende keine CoreData. Was ist der beste Weg, um ein UIDocument zu löschen?So löschen Sie iCloud-Dokumente?
Antwort
So löschen Sie das Dokument aus iCloud, zuerst müssen Sie den Dateinamen Sie löschen möchten, erhalten. und dann können Sie es mit NSFileManager löschen.
NSString *saveFileName = @"Report.pdf";
NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:@"Documents"] URLByAppendingPathComponent:saveFileName];
NSFileManager *filemgr = [NSFileManager defaultManager];
[filemgr removeItemAtURL:ubiquitousPackage error:nil];
Dies ist die Art und Weise, die ich verwendet, um Dokumente zu löschen, überprüfen Sie es. Es ist großartig für mich. Dank
Ich glaube, ich eine Lösung gefunden:
[[NSFileManager defaultManager] setUbiquitous:NO itemAtURL:url destinationURL:nil error:nil]
Quelle: http://oleb.net/blog/2011/11/ios5-tech-talk-michael-jurewitz-on-icloud-storage/
Das arbeitet nicht funktioniert iCloud dies jetzt ignoriert rufen Sie mit einem Null-Wert destinationURL. –
Siehe Apple-Dokumentation von "Verwalten des Lebens-Cyle eines Dokuments" unter ‚Löschen eines Dokuments. "
vom "Deleting a Document" Abschnitt des Document-Based App Programming Guide for iOS Kopierte
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
NSFileCoordinator* fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
[fileCoordinator coordinateWritingItemAtURL:fileURL options:NSFileCoordinatorWritingForDeleting
error:nil byAccessor:^(NSURL* writingURL) {
NSFileManager* fileManager = [[NSFileManager alloc] init];
[fileManager removeItemAtURL:writingURL error:nil];
}];
});
NB:." Wenn Sie ein Dokument aus dem Speicher löschen, sollte Ihr Code ungefähr dem entsprechen, was UIDocument für Lese- und Schreibvorgänge tut. Es sollte das Löschen asynchron auf einem Hintergrund Warteschlange auszuführen, und es sollte Datei Koordination verwenden.“
Wenn Sie ein 'UIDocument' verwenden, müssen Sie keinen eigenen NSFileCoordinator implementieren, der bereits in' UIDocument' eingebunden ist. Wenn Sie Ihre Methode verwenden, führt dies zu mehreren "NSFileCoordinator" -Instanzen. Siehe: https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileCoordinators/FileCoordinators.html – Joseph
@ Joseph Ich frage mich, aus Ihrer Antwort oben ist, dass, warum ich bin entweder nicht in der Lage zu löschen ein Gegenstand, der ein Objekt von UIDocument ist, von iCloud oder der App hängt, wenn Sie dies versuchen? Meine verwandte Frage [hier] (http://stackoverflow.com/questions/43821141/app-hangs-deleting-icloud-document-when-following-guideline-using-nsfilecoordi) – yohannes
SWIFT 3 kommen aus @AlexChaffee‚s Antwort
func deleteZipFile(with filePath: String) {
DispatchQueue.global(qos: .default).async {
let fileCoordinator = NSFileCoordinator(filePresenter: nil)
fileCoordinator.coordinate(writingItemAt: URL(fileURLWithPath: filePath), options: NSFileCoordinator.WritingOptions.forDeleting, error: nil) {
writingURL in
do {
try FileManager.default.removeItem(at: writingURL)
} catch {
DLog("error: \(error.localizedDescription)")
}
}
}
}
die Dokumentation nach Sie müssen Sachen async auf einem Hintergrund Warteschlange löschen. http://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/DocumentBasedAppPGiOS/ManageDocumentLifeCycle/ManageDocumentLifeCycle. html # // apple_ref/doc/uid/TP40011149-CH4-SW4 – Jonny
Wo dies funktioniert es Vorteil erfolgt nicht von 'UIDocument' Implementierung von' NSF ileCoordinator' Adrian Sarlis Antwort ist besser. – Joseph
Als Referenz beachten Sie, dass 'removeItemAtURL:' das Dokument nicht löschen wird, wenn es noch nicht von iCloud auf das Gerät heruntergeladen wurde. – Mark