J'utilise un uidocument avec iCloud. Je n'utilise pas Coredata. Quelle est la meilleure façon de supprimer un uidocument? P>
5 Réponses :
Je pense avoir trouvé une solution: source:
http://oleb.net/ Blog / 2011/11 / iOS5-Tech-Talk-Michael-Jurewitz-On-iCloud-Stockage / P> P>
Cela ne fonctionne pas - iCloud désigne maintenant cet appel avec une destination de valeur NIL-Value.
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];
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 code> de
nsfilecoordinator code> La réponse de Adrian Sarli est meilleure.
Pour référence, veuillez noter que supprimerItematurl: code> 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: code> n'a pas fonctionné tandis que l'expulsion est expulsé, mais
trashitematurl: résultantItemurl: Erreur: code> fait.
Voir la documentation Apple de "Gestion du cycle de vie d'un document" sous "Suppression d'un document" P>
Pour éviter une utilisation excessive de Google, voici le lien direct: développeur.apple.com/library/archive/documentation/...
copié du 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];
}];
});
Si vous utilisez un uidocument code>, il n'est pas nécessaire de mettre en œuvre votre propre nsfilecoordinator, il est déjà cuit dans
uidocument code>. L'utilisation de votre méthode entraîne des résultats coûteux dans plusieurs
NSFilecoordinator code>. 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
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)")
}
}
}
}