8
votes

Comment supprimer des documents iCloud?

J'utilise un uidocument avec iCloud. Je n'utilise pas Coredata. Quelle est la meilleure façon de supprimer un uidocument?


0 commentaires

5 Réponses :


0
votes

1 commentaires

Cela ne fonctionne pas - iCloud désigne maintenant cet appel avec une destination de valeur NIL-Value.



10
votes

Pour supprimer le document de iCloud, vous devez d'abord obtenir le nom de fichier que vous souhaitez supprimer. Et puis vous pouvez le supprimer à l'aide de 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];


5 commentaires

Selon les documents, vous devez supprimer des trucs ASYNC sur une file d'attente de fond. développeur.apple.com/library/ios/documentation/dataManagement / ...


Lorsque cela fonctionne, il ne profite pas de uidocument de nsfilecoordinator La réponse de Adrian Sarli est meilleure.


Pour référence, veuillez noter que supprimerItematurl: ne supprimera pas le document s'il n'a pas encore été téléchargé de iCloud à l'appareil.


J'ai utilisé cette solution dans le passé, mais iCloud fonctionne comme la merde sur iOS et cette solution échouera constamment. Alexchafee est le seul qui fonctionne pour moi 100% du temps.


@Mark, j'ai aussi trouvé que remetteurMaturl: n'a pas fonctionné tandis que l'expulsion est expulsé, mais trashitematurl: résultantItemurl: Erreur: fait.



0
votes

Voir la documentation Apple de "Gestion du cycle de vie d'un document" sous "Suppression d'un document"


1 commentaires

Pour éviter une utilisation excessive de Google, voici le lien direct: développeur.apple.com/library/archive/documentation/...



16
votes

copié du " Suppression d'un document " section du Guide de programmation de l'application basé sur des documents pour 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];
    }];
});


2 commentaires

Si vous utilisez un uidocument , il n'est pas nécessaire de mettre en œuvre votre propre nsfilecoordinator, il est déjà cuit dans uidocument . L'utilisation de votre méthode entraîne des résultats coûteux dans plusieurs NSFilecoordinator . Voir: développeur.apple.com/Library/ iOS / Documentation / FileManagement / ...


@Joseph Je me demande, de votre réponse ci-dessus, est-ce pourquoi je suis incapable de supprimer un élément, qui est un objet uidocument, de iCloud ou de l'application se bloque lorsque vous essayez de le faire? Ma question associée ici



4
votes

SWIFT 3 STRUT> Venez de la réponse de @Alexchafee

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


0 commentaires