2012-04-19 21 views

Respuesta

9

Para borrar el documento de iCloud, primero hay que obtener el nombre del archivo que desea borrar. y luego puede eliminarlo usando 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]; 

Esta es la forma en que solía borrar el documento, Compruébalo. Me está yendo genial. Gracias

+3

De acuerdo con los documentos, tiene que eliminar cosas asincrónicas en una cola de fondo. http://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/DocumentBasedAppPGiOS/ManageDocumentLifeCycle/ManageDocumentLifeCycle. html # // apple_ref/doc/uid/TP40011149-CH4-SW4 – Jonny

+0

Donde esto funciona, no aprovecha la implementación de 'NSF de 'UIDocument' ileCoordinator' La respuesta de Adrian Sarli es mejor. – Joseph

+1

Como referencia, tenga en cuenta que 'removeItemAtURL:' no eliminará el documento si aún no se ha descargado de iCloud al dispositivo. – Mark

0

documentación Ver Manzana de la "Gestión de la Vida Cyle de un documento" en 'Eliminación de un documento. "

13

Copiado de la sección "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:". Cuando elimina un documento del almacenamiento, su código debe aproximarse a lo que hace UIDocument para las operaciones de lectura y escritura. Se debe realizar la eliminación de forma asíncrona en una cola en segundo plano, y se debe utilizar la coordinación de archivos."

+1

Si está utilizando un 'UIDocument' no es necesario implementar su propio NSFileCoordinator, ya está horneado en' UIDocument'. Usar su método es costoso en múltiples instancias 'NSFileCoordinator'. Ver: https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileCoordinators/FileCoordinators.html – Joseph

+0

@Joseph Me pregunto, por su respuesta anterior, es por eso que no puedo eliminar un elemento, que es un objeto de UIDocument, de iCloud o la aplicación se bloquea al intentar hacerlo? Mi pregunta relacionada [aquí] (http://stackoverflow.com/questions/43821141/app-hangs-deleting-icloud-document-when-following-guideline-using-nsfilecoordi) – yohannes

1

SWIFT 3 provienen de respuesta

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