防止应用程序备份文档文件夹?

4
我正在尝试防止我的应用程序将文件备份到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];

控制台打印出“prevent backup method called without error”,但是应用程序仍然显示备份数据的数量与之前相同。您有任何想法这里出了什么问题吗?
-编辑2-
好的,我认为问题已经解决了。文件正在下载到名为“downloads”的子文件夹中。更改上面的代码,使其读取如下内容似乎已经解决了问题:
NSString *downloadsFolder = [documentsDirectory stringByAppendingPathComponent:(@"/downloads")];
NSURL *pathURL= [NSURL fileURLWithPath:downloadsFolder];
[PreventBackup addSkipBackupAttributeToItemAtURL:pathURL];

感谢大家的帮助。

1
请查看以下链接:http://stackoverflow.com/questions/10866590/prevent-icloud-backup-of-folder?lq=1 和 https://dev59.com/RV3Ua4cB1Zd3GeqP9iGe?rq=1 - Paresh Navadiya
谢谢。我已经看过第二个链接了,但它没有帮助,而第一个链接有用。 - Robert
2个回答

6
- (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];

非常感谢。这似乎可以解决问题,但有一个小问题;我需要注释掉 assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); - Robert

6

在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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接