2012-05-31 252 views
15

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

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

} 

回答

26

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

但是:

假设你有一个NSString *路径 - 路径的文件/文件夹,不调用该方法

[NSURL urlWithString:path];它将在5.0工作.1但不在5.1和更高。

use [NSURL fileURLWithPath:path];相反

所以:[MyClass的addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:路径]];

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

希望这会有所帮助。

问候, 乔治

+1

精彩你我早上救了! – microspino

+0

谢谢! FWIW,我向苹果公司发布了一个错误报告......如果它不起作用,至少应该给出一个错误。 –

+0

那么这绝对不是特质和怪异的或任何....谢谢你这么多回答这个答案!完全为我挽救了一大堆悲伤。 – DanM

2

我同样的问题。 我也解决了它改变我叫addSkipBackupAttributeToItemAtURL 的方式这是正确的做法:

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