5

私のアプリには、オフラインで使用するために最初の起動時に入力されるコア データ データベースがあります。このデータベースは、起動するたびにオンライン データベースと同期されます。最初の起動のみに大量のデータが含まれます。アプリはまた、Web からいくつかの画像を取得し、バイナリ データに変換して、オフラインで使用するためにコア データに保存します。これは、ユーザーがいくつかの画像を含むセクションに移動し、それらの画像のみがフェッチされた場合にのみ発生します (アプリは一度にすべての画像を取得するのではなく、必要な場合にのみ取得します)。

マジカルレコードを使用しています。

実行時にファイルにデータを保存しません。ただし、私のアプリは次のメッセージで拒否されました:

お客様のアプリは、App Store レビュー ガイドラインで義務付けられている iOS データ ストレージ ガイドラインに準拠していないことが判明しました。

「設定> iCloud>ストレージとバックアップ>ストレージの管理」を確認するようにアドバイスされていますが、アプリは表示されません。

コアデータをiCloudにバックアップしないようにマークする必要があることは理解していますが、これを行う方法がわかりません。おそらく、このようなものを実装する必要がありますが、それをコアデータファイルに適用する方法がわかりません。

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

2 に答える 2

2

以下は MacigalRecord のソース ファイルを変更するよりも優れている可能性があります。迅速に

MagicalRecord.setupCoreDataStackWithAutoMigratingSqliteStoreNamed("somedb.sqlite")
let dbPath = NSPersistentStore.MR_urlForStoreName("somedb.sqlite")
do {
  try dbPath.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey)
} catch let error {
    print(error)
}
于 2015-12-10T01:12:01.753 に答える
1

探す:NSPersistentStoreCoordinator+MagicalRecord.m

次に、次を見つけます。

- (NSPersistentStore *)MR_addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options

メソッドの下部に、次のように表示されます。

if (!store) 
{
    [MagicalRecord handleErrors:error];
}

それを次のように変更します。

if (!store) 
{
    [MagicalRecord handleErrors:error];
}
else
{
    [self addSkipBackupAttributeToItemAtURL:url];
}

メソッドが異なっているように見える場合はお知らせください。ただし、これは私自身の実装に使用するものです。質問で言及した機能を必ずドロップしてください。

于 2013-02-14T01:44:01.290 に答える