2012-04-19 16 views

risposta

9

Per eliminare il documento da iCloud, prima devi ottenere il nome del file che si desidera eliminare. e quindi è possibile eliminarlo utilizzando NSFileManager.

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]; 

Questo è il modo in cui ho usato per eliminare il documento, Check it out. Mi sta benissimo. Grazie

+3

In base ai documenti, devi eliminare roba asincrona su una coda in background. http://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/DocumentBasedAppPGiOS/ManageDocumentLifeCycle/ManageDocumentLifeCycle. html # // apple_ref/doc/uid/TP40011149-CH4-SW4 – Jonny

+0

Dove funziona non sfrutta l'implementazione di 'NSF di UIDocument' ileCoordinator' La risposta di Adrian Sarli è migliore. – Joseph

+1

Per riferimento, si noti che 'removeItemAtURL:' non cancellerà il documento se non è stato ancora scaricato da iCloud sul dispositivo. – Mark

0

documentazione Sede di Apple di "Gestione della Vita-Cyle di un documento" sotto 'Eliminazione di un documento. "

13

Copiato dalla sezione "Deleting a Document" del Document-Based App Programming Guide for iOS

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:." Quando elimini un documento dalla memoria, il tuo codice dovrebbe approssimarsi a quello che UIDocument fa per le operazioni di lettura e scrittura. Dovrebbe eseguire l'eliminazione in modo asincrono su una coda di sfondo, e dovrebbe utilizzare coordinamento file."

+1

Se si utilizza un 'UIDocument' non è necessario implementare il proprio NSFileCoordinator, esso è già inserito in' UIDocument'. L'utilizzo del metodo è un risultato costoso in più istanze di 'NSFileCoordinator'. Vedi: https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileCoordinators/FileCoordinators.html – Joseph

+0

@Joseph Mi chiedo, dalla tua risposta sopra, è per questo che non sono in grado di eliminare un oggetto, che è un oggetto di UIDocument, da iCloud o l'app si blocca quando si tenta di farlo? La mia domanda correlata [qui] (http://stackoverflow.com/questions/43821141/app-hangs-deleting-icloud-document-when-following-guideline-using-nsfilecoordi) – yohannes

1

SWIFT 3 provengono dalla risposta @AlexChaffee s'

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