2013-01-24 11 views
5

私のアプリケーションには、オフラインで使用するための最初の起動時に満たされるコアデータdbがあります。このdbは、起動するたびにオンラインdbと同期されます。最初の打ち上げには大量のデータが含まれています。アプリはまた、ウェブからいくつかのイメージを取り出し、バイナリデータに変換し、オフラインで使用するためにコアデータに保存します。これは、ユーザーがいくつかのイメージを含むセクションに移動し、それらのイメージだけが取得された場合に発生します(アプリケーションは、必要な場合にのみ、すべてのイメージを一度にフェッチしません)。コアデータ「バックアップしない」フラグ

私は魔法の記録を使用しています。

私は実行時にファイルにいかなる種類のデータも保存しません。しかし、私のアプリはこのメッセージで拒否されました:

あなたのアプリは、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; } 

答えて

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

方法が違うかどうかを教えてください。これは自分の実装に使用する方法です。あなたの質問にあなたが言及した機能をドロップすることを確かめてください。

+1

迅速に が、これは我々がこのポッドのためのアップデートを引っ張るいつでも上書きされませんでしたか? – Matt

2

以下は、MacigalRecordのソースファイルを変更するよりも良い場合があります。 MagicalRecordはポッドとして使用されている場合

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) 
} 
+0

これは行く方法です。 Objective Cの人々の場合: NSURL * dbURL = [NSPersistentStore MR_urlForStoreName:@ "storename"]; NSError * error = nil; BOOL success = [dbURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKeyエラー:&error]; ' – Richard

+0

.sqliteだけでなく、ディレクトリ全体をバックアップから除外することをお勧めします。そうしないと、ジャーナリングDBファイルがバックアップに含まれます。私がうまく覚えていれば、MagicalRecordはデフォルトでアプリケーションサポート内にディレクトリを作成し、そこにはすべてのデータベースが保存されます。 'DBPATH = NSPersistentStore.MR_urlForStoreName(storeFileName)は.URLByDeletingLastPathComponent'せ – Lubbo

+0

' DBPATH = NSPersistentStore.MR_urlForStoreName(storeFileNameが){ dbPath.setResourceValueを試すん { を.URLByDeletingLastPathComponentせた場合(のNSNumberを:だから、おそらくより良い、このように1つ上のレベルに除外する(bool:true)、forKey:NSURLIsExcludedFromBackupKey) } catchエラーを受け取ります。{ 印刷(エラー) } } – Lubbo

関連する問題