2012-05-31 250 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]];