NSURLIsExcludedFromBackupKey无法正确设置

时间:2012-05-31 15:00:16

标签: iphone ios

我试图阻止整个文件夹由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;

}

2 个答案:

答案 0 :(得分:26)

我刚刚在我的应用程序中解决了这个问题,虽然它有点令人沮丧,但最终效果都很好。 所以,这是addSkipBackupAttributeToItemAtURL的代码。您可能想要检查出来。它也对待5.0.1和5.0。您只需在代码中处理5.1及更高版本。

<强> BUT:

假设您有一个NSString *路径 - 文件/文件夹的路径,不要使用调用方法:

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

取而代之的是use [NSURL fileURLWithPath:path];

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

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

希望这有帮助。

此致 乔治

答案 1 :(得分:2)

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

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