【问题标题】:How to delete iCloud documents?如何删除 iCloud 文档?
【发布时间】:2012-04-30 13:36:27
【问题描述】:

我正在使用带有 iCloud 的 UIDocument。我没有使用 CoreData。删除 UIDocument 的最佳方法是什么?

【问题讨论】:

    标签: iphone ios icloud


    【解决方案1】:

    我想我找到了解决办法:

    [[NSFileManager defaultManager] setUbiquitous:NO itemAtURL:url destinationURL:nil error:nil]
    

    来源: http://oleb.net/blog/2011/11/ios5-tech-talk-michael-jurewitz-on-icloud-storage/

    【讨论】:

    • 这不起作用 - iCloud 现在会忽略此调用,目标 URL 为零。
    【解决方案2】:

    要从 iCloud 中删除文档,首先您必须获取要删除的文件名。然后你可以使用 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];
    

    这是我用来删除文档的方式,检查一下。 这对我来说很棒。 谢谢

    【讨论】:

    • 根据文档,您必须在后台队列中异步删除内容。 developer.apple.com/library/ios/documentation/DataManagement/…
    • 在这个工作的地方它没有利用UIDocument's implementation of NSFileCoordinator Adrian Sarli's answer更好。
    • 供参考,请注意removeItemAtURL:不会删除尚未从iCloud下载到设备的文档。
    • 我过去曾使用过这个解决方案,但 iCloud 在 iOS 上的工作方式就像垃圾一样,而且这个解决方案会不断失败。 AlexChaffee 是唯一一个 100% 对我有用的人。
    • @Mark 我也发现removeItemAtURL: 在被驱逐时不起作用,但trashItemAtURL:resultingItemURL:error: 可以。
    【解决方案3】:

    请参阅“删除文档”下的“管理文档生命周期”的 Apple 文档。

    【讨论】:

    【解决方案4】:

    复制自Document-Based App Programming Guide for iOS"Deleting a Document" 部分。

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

    注意:“当您从存储中删除文档时,您的代码应该近似于 UIDocument 对读写操作所做的操作。它应该在后台队列上异步执行删除,并且应该使用文件协调。”

    【讨论】:

    • 如果您使用的是UIDocument,则无需实现您自己的NSFileCoordinator,它已经被嵌入UIDocument。在多个 NSFileCoordinator 实例中使用您的方法是昂贵的结果。见:developer.apple.com/library/ios/documentation/FileManagement/…
    • @Joseph 我想知道,根据您上面的回答,这就是为什么我无法从 iCloud 中删除作为 UIDocument 的对象的项目,或者应用程序在尝试这样做时挂起?我的相关问题here
    【解决方案5】:

    SWIFT 3 来自@AlexChaffee 的回答

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

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 2014-11-22
      相关资源
      最近更新 更多