阻止应用备份文档文件夹?
我试图阻止我的应用程序将文件备份到iCloud,但已经变得完全混乱,有点迷失。
-编辑-
我已经对此进行了更新,以反映我在下面的海报中所做的更改。
我想阻止备份到应用程序文档目录的文件。
到目前为止,我有一个名为PreventBackup
的类,具有以下方法:
+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { NSError *error = nil; BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: &error]; if(!success){ NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error); } NSLog(@"prevent backup method called without error"); return success; }
我在应用程序启动时使用此代码调用它:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSURL *pathURL= [NSURL fileURLWithPath:documentsDirectory]; [PreventBackup addSkipBackupAttributeToItemAtURL:pathURL];
cosole打印prevent backup method called without error
但应用程序仍显示为具有相同数量的数据,以便以前执行备份。
知道这出错了吗?
-EDIT 2-
好的,我认为这已经解决了。 文件正在下载到名为“downloads”的子文件夹。 更改上面的代码,使其读取如下似乎已成功:
NSString *downloadsFolder = [documentsDirectory stringByAppendingPathComponent:(@"/downloads")]; NSURL *pathURL= [NSURL fileURLWithPath:downloadsFolder]; [PreventBackup addSkipBackupAttributeToItemAtURL:pathURL];
感谢大家的帮助。
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); NSError *error = nil; BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: &error]; if(!success){ NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error); } return success; } NSURL *documentURLWithExtension = [documentURL URLByAppendingPathExtension:extensionType];
将此“ documentURLWithExtension
”传递给此函数
[self addSkipBackupAttributeToItemAtURL:documentURLWithExtension];
在Swift中:
//Path of document directory var docPathAry : NSArray! = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) var docDirPathStr: AnyObject? = docPathAry.count > 0 ? docPathAry[0] : nil self.addSkipBackupAttributeToItemAtURL(NSURL.fileURLWithPath(docDirPathStr as NSString))
和:
func addSkipBackupAttributeToItemAtURL(URL: NSURL!) -> Bool { assert(NSFileManager.defaultManager().fileExistsAtPath(URL.path)) var err : NSError? = nil var success : Bool! = URL.setResourceValue(NSNumber.numberWithBool(true), forKey: NSURLIsExcludedFromBackupKey, error: &err) if(!success) { println("Error excluding \(URL.lastPathComponent) from backup\(err) ") } return success }