15

ドキュメントディレクトリにキャッシュ用のファイルとディレクトリの巨大なツリーがあります。

推奨どおり、NSURLIsExcludedFromBackupKeyiTunes がこのデータをアプリに保存しないようにするために使用します。

ルート ディレクトリの URL で 1 回使用できますか?

[rootDirectoryURL setResourceValue:[NSNumber numberWithBool:YES] forKey:@"NSURLIsExcludedFromBackupKey" error:&error];

または、ファイルごとに呼び出す必要がありますか?

4

3 に答える 3

26

はい、除外したいディレクトリの NSURL を渡すことができます。

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);

    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;
}

また、疑わしい場合は、使用して任意のファイルをテストできます

id flag = nil;
[URL getResourceValue: &flag
               forKey: NSURLIsExcludedFromBackupKey error: &error];
NSLog (@"NSURLIsExcludedFromBackupKey flag value is %@", flag)
于 2013-01-17T10:29:08.870 に答える
1

(シミュレーターでの)私のテストでは、再帰的ではなく、Documents ディレクトリのデータが多すぎるためにアプリが拒否されました。Documents ディレクトリに直接ある各フォルダーにはフラグが付けられているため、実際のデバイスであっても、それらのフォルダー内のファイルにはフラグが付けられていないと思います。ただし、フォルダーに新しいコンテンツも追加したので、フラグをもう一度追加する必要があるかもしれません。

だから私は今この再帰的な方法を使用しており、追加された新しいファイルごとにフラグを追加します:

- (void) addSkipBackupAttributeToFolder:(NSURL*)folder
{
    [self addSkipBackupAttributeToItemAtURL:folder];

    NSError* error = nil;
    NSArray* folderContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[folder path] error:&error];

    for (NSString* item in folderContent)
    {
        NSString* path = [folder.path stringByAppendingPathComponent:item];
        [self addSkipBackupAttributeToFolder:[NSURL fileURLWithPath:path]];
    }
}
于 2014-10-31T21:06:02.703 に答える
-1

受け入れられた回答の迅速なバージョンは次のとおりです。

func addSkipBackupAttributeToItemAtURL(URL: NSURL) -> Bool {
    assert(NSFileManager.defaultManager().fileExistsAtPath(URL.path!))
    var success: Bool = true

    do {
        try URL.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey)
    } catch {
        success = false
        print("Error excluding \(URL.lastPathComponent) from backup: \(error)")
    }

    return success
}
于 2016-09-08T08:50:04.373 に答える