2013-01-24 87 views
5

我的應用程序有一個核心數據數據庫,在第一次啓動時被填充以供離線使用。然後在每次啓動時使用在線數據庫同步該數據庫。只有首次發佈包含大量數據。該應用程序還從網上獲取一些圖像,然後將其轉換爲二進制數據並保存爲核心數據以供離線使用。這隻有當用戶導航到包含一些圖像的部分時纔會發生,並且只有那些圖像被提取(應用程序不會一次提取所有圖像,只是在需要時才提取)。核心數據「不備份」標誌

我正在使用魔法記錄。

我不會在運行時將任何種類的數據保存到文件中。然而,我的應用程序因此消息被拒絕:

我們發現您的應用程序未遵循iOS數據存儲指南,這是每個App Store評論指南所必需的。

它建議我檢查「設置> 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

如果MagicalRecord被用作一個吊艙,就不會這樣被改寫我們拉的更新該吊艙任何時候? – Matt

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

這是要走的路。對於目標C人員: 'NSURL * dbURL = [NSPersistentStore MR_urlForStoreName:@「storename」]; NSError * error = nil; BOOL成功= [dbURL setResourceValue:[NSNumber的numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey誤差:&錯誤];' – Richard

+0

我建議排除從備份整個目錄,不僅.sqlite。否則,日記數據庫文件將包含在備份中。如果我記得很清楚Ma​​gicalRecord默認創建了Application Support中的一個目錄,用於存儲數據庫。所以,可能更好地排除一個級別是這樣的:'讓DBPATH = NSPersistentStore.MR_urlForStoreName(storeFileName).URLByDeletingLastPathComponent' – Lubbo

+0

'如果讓DBPATH = NSPersistentStore.MR_urlForStoreName(storeFileName).URLByDeletingLastPathComponent { 做{ 嘗試dbPath.setResourceValue(NSNumber的(bool:true),forKey:NSURLIsExcludedFromBackupKey) } catch let error { print(error) } }' – Lubbo