应用程序因数据存储而被拒绝 - 如何让它忽略文件夹中的所有文件?

时间:2012-05-30 18:50:35

标签: iphone ios icloud

我有一个应用程序可以下载大量照片并将它们存储在Documents文件夹的子文件夹中,这显然很好,直到iOS 5.1

现在Apple正在告诉我,我需要将其他地方或其他地方标记为不备份。这是一个应用更新,因此对于我的大多数用户来说,这些子文件夹中已经存在数据。

如何让iOS跳过我的子文件夹中的所有文件或跳过Documents文件夹中的特定文件?

将所有文件移动到缓存中是一项巨大的任务,就像他们建议的那样。

我读过这篇文章,但我不确定我应该在哪里实现这个: https://developer.apple.com/library/ios/#qa/qa1719/_index.html

1 个答案:

答案 0 :(得分:5)

您可以使用NSFileNanager列出所有文件,然后调用您喜欢的功能。您的代码将类似于:

// From Apple FAQ
#import <sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);

    const char* filePath = [[URL path] fileSystemRepresentation];

    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;
}


- (void) addSkipBackupAttributeToItemsInFolder:(NSString*)folder
{
    NSFileManager *fm = [NSFileManager defaultManager];
    NSArray *dirContents = [fm contentsOfDirectoryAtPath:folder error:nil];

    for (int curFileIdx = 0; curFileIdx < [dirContents count]; ++curFileIdx)
    {
        NSString* curString = [folder stringByAppendingPathComponent:[dirContents objectAtIndex:curFileIdx]];
        NSURL* curFileUrl = [NSURL fileURLWithPath:curString];
        [self addSkipBackupAttributeToItemAtURL: curFileUrl];
    }
}

你会像这样使用它:

    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    [self addSkipBackupAttributeToItemsInFolder:documentsDirectory];