2012-04-19 5 views

Antwort

9

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

+3

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

+0

Wo dies funktioniert es Vorteil erfolgt nicht von 'UIDocument' Implementierung von' NSF ileCoordinator' Adrian Sarlis Antwort ist besser. – Joseph

+1

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

0

Siehe Apple-Dokumentation von "Verwalten des Lebens-Cyle eines Dokuments" unter ‚Löschen eines Dokuments. "

13

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.“

+1

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

+0

@ 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

1

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)") 
      } 
     } 
    } 
}