5

我的应用程序有一个核心数据数据库,在首次启动时填充以供离线使用。然后,该数据库在每次启动时与在线数据库同步。只有第一次启动包含大量数据。该应用程序还从网络上获取一些图像,然后将其转换为二进制数据并保存到核心数据以供离线使用。这仅在用户导航到包含一些图像的部分时发生,并且仅获取那些图像(应用程序不会一次获取所有图像,仅在需要时获取)。

我正在使用魔法唱片。

我不会在运行时将任何类型的数据保存到文件中。但是,我的应用被此消息拒绝:

我们发现您的应用未遵循 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 回答