Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何删除iCloud文档?_Iphone_Ios_Icloud - Fatal编程技术网

Iphone 如何删除iCloud文档?

Iphone 如何删除iCloud文档?,iphone,ios,icloud,Iphone,Ios,Icloud,我正在使用iCloud的UIDocument。我没有使用CoreData。删除UIDocument的最佳方法是什么?我想我找到了一个解决方案: [[NSFileManager defaultManager] setUbiquitous:NO itemAtURL:url destinationURL:nil error:nil] 资料来源: 要从iCloud中删除文档,首先必须获取要删除的文件名。然后可以使用NSFileManager删除它 NSString *saveFileName = @"

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

我想我找到了一个解决方案:

[[NSFileManager defaultManager] setUbiquitous:NO itemAtURL:url destinationURL:nil error:nil]
资料来源:

要从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];
这是我用来删除文档的方法,请检查它。 这对我来说太棒了。
谢谢

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

复制自


注意:“当您从存储器中删除文档时,您的代码应该与UIDocument的读写操作大致相同。它应该在后台队列上异步执行删除,并且应该使用文件协调。”

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

根据文档,您必须在后台队列中异步删除内容。这样做不会利用
UIDocument
NSFileCoordinator
的实现。Adrian Sarli的回答更好。请注意,如果文档尚未关闭,则
removitemature:
不会删除文档,以供参考从iCloud加载到设备。我以前使用过此解决方案,但iCloud在iOS上的工作方式很糟糕,此解决方案会不断失败。AlexChaffee是唯一一个100%适用于我的解决方案。@Mark我也发现
RemoveItemAttribute:
在被逐出时不起作用,但
Trashitemture:resultingItemURL:error:
起作用。如果您使用的是
UIDocument
无需实现您自己的NSFileCoordinator,它已经被烘焙到
UIDocument
中。使用您的方法成本高昂,会导致多个
NSFileCoordinator
实例。请参阅:@Joseph我想知道,从您上面的回答来看,这就是为什么我无法删除一项,而我是iCloud的UIDocument对象,还是尝试执行此操作时应用程序挂起?我的相关问题不起作用-iCloud现在以零值destinationURL忽略此调用。为避免过度使用google,以下是直接链接:
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)")
            }
        }
    }
}