NSURLIsExcludedFromBackupKey无法正确设置

我试图阻止从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; } 

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

但:

比方说,你有一个NSString *path – 文件/文件夹的path, 不要调用方法

[NSURL urlWithString:path]; 它将在5.0.1上工作,但不在5.1和更高版本上。

而是use [NSURL fileURLWithPath:path];

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

事实上,我认为这是你的代码唯一的问题。 采取我联系的方法,只会提供向后兼容性,这是一个很大的补充。

希望这可以帮助。

问候,乔治

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

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