2012-07-19 49 views
0

我似乎無法從我的代碼中獲取備份屬性參數。不管我看起來如何做,該方法返回false與「未知的錯誤-1」。我曾嘗試跳過備份方法的不同迭代,但下面是我使用的是最新的基礎上,另一篇文章,我發現:Obj-C - 添加'skip-backup'屬性總是失敗

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL 
{ 
    const char* filePath = [[URL path] fileSystemRepresentation]; 
    const char* attrName = "com.apple.MobileBackup"; 
    if (&NSURLIsExcludedFromBackupKey == nil) { 
     // iOS 5.0.1 and lower 
     u_int8_t attrValue = 1; 
     int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); 
     return result == 0; 
    } else { 
     // First try and remove the extended attribute if it is present 
     int result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0); 
     if (result != -1) { 
      // The attribute exists, we need to remove it 
      int removeResult = removexattr(filePath, attrName, 0); 
      if (removeResult == 0) { 
       NSLog(@"Removed extended attribute on file %@", URL); 
      } 
     } 

     // Set the new key 
     return [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil]; 
    } 
} 

我的方法調用如下所示(它總是打印「不成功「):

if ([self addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:filePath]]) { 
    NSLog(@"success!"); 
} else { 
    NSLog(@"not successful"); 
} 

而filePath是文檔文件夾映像的NSString路徑。我記錄一個圖像路徑的示例如下:

/var/mobile/Applications/B3583D06-38BC-45F0-A027-E79997F0EC60/Documents/myImage.png

在我的應用程序,它通過循環的所有(衆多)文件,我推送到那裏,並且它添加了這個屬性。它在每一個都失敗了。由於這些動態驅動文件對離線功能的要求很高,我需要能夠實現這一目標。我沒有看到很多其他人都有這個問題,所以這告訴我我可能會錯過這裏明顯的東西,哈哈。

我發現這個職位:Why was my application still rejected after excluding files from iCloud backup using this code?

這看起來很有希望,什麼我的問題可能是,但目前還沒有真正關心如何具體解決任何細節(它只是建議使用/庫,而不是文檔的夾?)。

感謝任何人提前誰可以幫助! -Vincent

+0

什麼是您的iOS SDK版本和iOS目標版本? – 2012-07-19 16:33:14

+0

對不起,我應該提到這一點。 iOS SDK是:5.1,iOS目標版本是:4.3(但如果需要,可以提出這個問題)。不過,我的設備是最新的操作系統,這就是我從Xcode運行應用程序的地方。謝謝! – svguerin3 2012-07-19 16:37:50

回答

0

爲了解決這個問題,我最終只需要在/ Documents目錄下創建一個文件夾,然後我改變了應用程序以將所有文件指向該子文件夾。

在我的AppDelegate

所以,在任何已加載的前期,我添加如下代碼如下:

NSString *tempDir = [documentsDirectory stringByAppendingString:@"/tempfiles"]; 
[[NSFileManager defaultManager] createDirectoryAtPath:tempDir 
         withIntermediateDirectories:NO 
             attributes:nil 
              error:nil]; 
NSURL *tempDirPathURL = [NSURL URLWithString:tempDir]; 
if ([[MainControl controlSystem] addSkipBackupAttributeToItemAtURL:tempDirPathURL]) { 
     NSLog(@"did add attribute!"); 
} else { 
    NSLog(@"adding attribute failed! :("); 
} 

而當我這樣做,它實際上陷入了「沒有添加屬性」日誌語句沒有問題!我不知道爲什麼這在單個文件級別上不起作用,但至少這是有效的,它實際上是一個更好的解決方案,因爲現在我不必循環數百個文件來添加屬性,而且我只能必須將其添加到一個地方。