8

私は、コアデータリポジトリを含む任意のタイプのファイルを持っていますが、iOSにそれらを削除させないようにする必要があります。通常、私はiCloudにこれらのファイルをバックアップさせたくありません。どこに保存すればいいですか?

4

1 に答える 1

18

iOS5.0以前、5.0.1、5.1以降からローカルに変更されたファイルの保存は、主にiCloudバックアップの問題に対処するためのものです。以下をサポートする情報を一緒に提供する2つのAppleソースドキュメント(ファイルシステムプログラミングガイド、およびQA1719 )があります。

  • iOS 5.0

ファイルがDocumentsフォルダーに保存されている場合、バックアップを防ぐ方法がないため、ファイルは「Caches」ディレクトリに保存する必要があります。システムがこれらのファイルを削除する可能性があることに注意してください(QA1719を参照)。そのため、必要に応じてそれぞれを再作成する機能が必要になります。キャッシュディレクトリを見つけるには、次を使用します。

[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]
  • iOS 5.0.1

ファイルは「/Library/ ApplicationSupport」(FSP、15ページ)に保存する必要があります。これには、次の方法でアクセスしやすくなります。

[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject]

私の経験では、このディレクトリは常に存在するとは限らないため、次のように作成する必要があります。

- (NSString *)applicationAppSupportDirectory
{
    return [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject];
}

NSFileManager *manager = [NSFileManager defaultManager];
NSString *appSupportDir = [self applicationAppSupportDirectory];
if(![manager fileExistsAtPath:appSupportDir]) {
    __autoreleasing NSError *error;
    BOOL ret = [manager createDirectoryAtPath:appSupportDir withIntermediateDirectories:NO attributes:nil error:&error];
    if(!ret) {
        NSLog(@"ERROR app support: %@", error);
        exit(0);
    }
}

このディレクトリ(またはサブディレクトリ)に保存されたファイルには、バックアップしないようにiCloudに指示する拡張属性が必要です(QA1719を参照)。

PS:展開ターゲットをこのリリースに設定する方法が見つかりません。方法がある場合は、コメントを残してください。

  • iOS 5.1

ファイル(またはファイルのフォルダー)は、上記のように「アプリケーションサポート」フォルダーに配置する必要があります。iCloudが使用をバックアップしないようにするには:

[URL setResourceValue: [NSNumber numberWithBool: YES] forKey:NSURLIsExcludedFromBackupKey error:&error]

QA1719で説明されているように。このキーをディレクトリに適用して、その内容がバックアップされないようにすることができることに注意してください。QA1719からの完全な方法:

- (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;
}
于 2012-09-11T13:52:32.123 に答える