2012-04-19 115 views

回答

9

从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]; 

这是我用来删除文档的方式,检查出来。 这对我来说太好了。 感谢

+3

根据文档,你必须删除背景队列上的异步内容:http://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/DocumentBasedAppPGiOS/ManageDocumentLifeCycle/ManageDocumentLifeCycle。 html#// apple_ref/doc/uid/TP40011149-CH4-SW4 – Jonny 2012-06-25 07:09:58

+0

这里工作的地方没有利用'UIDocument'实现'NSF ileCoordinator'阿德里安萨利的答案是更好的。 – Joseph 2014-03-11 09:43:28

+1

仅供参考,请注意,如果文档尚未从iCloud下载到设备,'removeItemAtURL:'将不会删除该文档。 – Mark 2015-02-12 08:45:45

0

“管理生命Cyle文档”下的“删除文档的看到苹果的文档。‘

13

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

NB。’当您从存储中删除文档时,您的代码应与UIDocument在读取和写入操作方面的大致程度相近。它应该在后台队列异步执行删除,它应该使用文件的协调。”

+1

如果您使用的是'UIDocument',则不需要实现您自己的NSFileCoordinator,它已经被烘焙到'Uidocument'中。在多个NSFileCoordinator实例中使用你的方法是很昂贵的结果。见:https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileCoordinators/FileCoordinators.html – Joseph 2014-03-11 09:42:15

+0

@约瑟夫我想知道,从你上面的答案,是我为什么无法删除一个来自iCloud或应用程序的UIDocument对象的项目在尝试时会挂起?我的相关问题[这里](http://stackoverflow.com/questions/43821141/app-hangs-deleting-icloud-document-when-following-guideline-using-nsfilecoordi) – yohannes 2017-05-07 11:11:08

1

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