15

我试图防止整个文件夹被iTunes备份。我遵循了技术报告http://developer.apple.com/library/ios/#qa/qa1719/_index.html但似乎 falg 每次都是零。我使用在模拟器和设备上试用过的 IOS 5.1。但没有任何帮助。这些方法每次都返回“成功”,但标志仍然为零。

+ (BOOL) hasSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    NSError *error = nil;

    id flag = nil;
    BOOL success = [URL getResourceValue: &flag
                                  forKey: NSURLIsExcludedFromBackupKey error: &error];

    if(!success){

        NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
        return false;
    }

    if (!flag)
        return false;

    return [flag boolValue];
}

+ (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);

    }

    return success;

}

+ (BOOL)removeSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    NSError *error = nil;

    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: NO]
                                  forKey: NSURLIsExcludedFromBackupKey error: &error];

    if(!success){

        NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);

    }

    return success;

}
4

2 回答 2

26

我刚刚在我的应用程序中修复了这个问题,虽然有点令人沮丧,但一切都很好。所以,这里是addSkipBackupAttributeToItemAtURL的代码。你可能想检查一下。它也处理 5.0.1 和 5.0。您只在代码中处理 5.1 及更高版本。

但:

假设您有一个 NSString *path - 文件 /folder 的路径,不要使用以下方法调用该方法

[NSURL urlWithString:path]; 它适用于 5.0.1,但不适用于 5.1 及更高版本。

反而use [NSURL fileURLWithPath:path];

所以:[MyClass addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:path]];

事实上,我认为这是您的代码的唯一问题。采用我链接的方法,只会提供向后兼容性,这是一个很好的补充。

希望这可以帮助。

问候,乔治

于 2012-06-13T09:47:22.833 回答
2

对我来说同样的问题。我也解决了它改变我调用 addSkipBackupAttributeToItemAtURL 的方式这是正确的方法:

[MyClass addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:path]];
于 2012-06-15T09:27:35.697 回答