4

アプリがファイルを iCloud にバックアップしないようにしようとしていますが、完全に混乱し、少し迷ってしまいました。

-編集-

以下のポスターのおかげで行った変更を反映するために、これを更新しました。

アプリのドキュメント ディレクトリにダウンロードされたファイルのバックアップを防止したい。

PreventBackupこれまでのところ、次のメソッドで呼び出されるクラスがあります。

+ (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);
   }
   NSLog(@"prevent backup method called without error");
   return success;
}

アプリの起動時に次のコードで呼び出しています。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSURL *pathURL= [NSURL fileURLWithPath:documentsDirectory];
[PreventBackup addSkipBackupAttributeToItemAtURL:pathURL];

コソールは印刷されますprevent backup method called without errorが、アプリは以前と同じ量のバックアップ用のデータを保持しているように表示されています。

これがどこで間違っているのか考えていますか?

-編集2-

わかりました、これで解決したと思います。ファイルは「downloads」というサブフォルダーにダウンロードされます。上記のコードを次のように変更すると、うまくいったようです。

NSString *downloadsFolder = [documentsDirectory stringByAppendingPathComponent:(@"/downloads")];
NSURL *pathURL= [NSURL fileURLWithPath:downloadsFolder];
[PreventBackup addSkipBackupAttributeToItemAtURL:pathURL];

ご協力いただきありがとうございます。

4

2 に答える 2

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

NSURL *documentURLWithExtension = [documentURL URLByAppendingPathExtension:extensionType];

documentURLWithExtensionこの " " をこの関数に渡します

[self addSkipBackupAttributeToItemAtURL:documentURLWithExtension];
于 2012-12-03T12:12:55.407 に答える