标签: mapping-model

多版本升级的核心数据迁移

我有一个使用Core Data的iPhone应用程序.

我做了一个更新并使用轻量级迁移从我的MOM(管理对象模型)的V1到V2.这非常有效.

当我想要去我妈妈的V3(及以上)时会发生什么?

  • 如果我决定继续轻量级迁移,它会自动处理从我的MOM的V1到V3和V2迁移到V3,还是需要做一些额外的事情?
  • 如果我决定使用映射模型,会发生什么?如何处理将V1和V2 MOM升级到V3的问题?我是否需要为V1到V3和V2到V3创建映射模型?
  • 这个问题更进一步......当我拥有V6 MOM并且仍然需要支持从V1 MOM升级的可能性时会发生什么?

另一个问题是确定当前MOM版本的最佳方法是什么?我应该使用isConfiguration:compatibleWithStoreMetadata:

谢谢你的帮助.我很喜欢核心数据.但它有时让我头晕目眩,我感到困惑,这就是我寻求一些圣人智慧的原因.

migration iphone cocoa core-data mapping-model

25
推荐指数
2
解决办法
3822
查看次数

通过迁移将核心数据索引添加到某些属性

出于性能原因,我想将索引属性设置为我的一些实体.我创建了一个新的核心数据模型版本来执行更改.核心数据检测到更改并将我的模型迁移到新版本,但是,没有生成索引.

如果我从头开始重新创建数据库,那么索引就在那里.我在iPhone和模拟器上检查了SQLite浏览器.只有先前格式的数据库已存在,才会出现此问题.

有没有办法手动添加索引?为此写一些sql?或者我错过了什么?我已经做了一些更重要的迁移,没有问题.但那些缺失的索引让我烦恼.

谢谢你的帮助!

migration iphone indexing core-data mapping-model

25
推荐指数
1
解决办法
7364
查看次数

在我的XCode数据模型发生任何变化后,我继续"保存操作失败"

我开始使用Core Data进行iPhone开发.我开始创建一个非常简单的实体(称为Evaluation),只有一个字符串属性(称为evaluationTopic).我有以下代码插入一个新的字符串:

- (void)insertNewObject {

    // Create a new instance of the entity managed by the fetched results controller.
    NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
    NSEntityDescription *entity = [[fetchedResultsController fetchRequest] entity];
    NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];

    // If appropriate, configure the new managed object.
    [newManagedObject setValue:@"My Repeating String" forKey:@"evaluationTopic"];

    // Save the context.
    NSError *error;
    if (![context save:&error]) {
        // Handle the error...
    }

    [self.tableView reloadData];

}
Run Code Online (Sandbox Code Playgroud)

这完全正常,通过按下+按钮,新的"我的重复字符串"将被添加到表视图中并处于持久存储中.

然后我在XCode中按下了"设计 - >添加模型版本".我向现有实体添加了三个实体,并向现有"评估"实体添加了新属性.然后,我通过按"文件 - >新文件 - >托管对象类"创建了实体的新文件,并为我的四个实体创建了一个新的.h和.m文件,包括带有Evaluation.h和评估的"评估"实体.M.现在我通过设置"设计 - >数据模型 - >设置当前版本"来更改模型版本.完成所有这些后,我更改了insertMethod: …

iphone version-control xcode core-data mapping-model

22
推荐指数
3
解决办法
2万
查看次数

在使用iOS的块中进行多次传递核心数据迁移

我正在尝试迁移大约11Mb的iPhone/iPad sqlite商店.它有大约30个不同的实体,都非常相互关联.

在3GS上,需要相当长的时间.即使轻量级迁移也需要大约四分钟.

我想这是因为所有关系都保存在内存中.

阅读Apple迁移指南,它说对于大型数据集,一种方法是使用不同的映射模型进行多次传递.

一切都很好.但是,如果一个映射模型中的实体与另一个映射模型中的实体相关,则似乎无法执行此操作.实际上,编译错误是在Mapping Model xcmappingmodel文件中的"无法使用nil映射名称自动生成值表达式"的行中生成的.

任何提示非常感谢.

非常感谢,

马克斯

iphone core-data core-data-migration ios mapping-model

13
推荐指数
1
解决办法
1976
查看次数

在AngularJS中设置动态ng模型名称

这里这里有类似的问题,虽然我的用例有点不同.

我有一个名为的对象uniqueLists,如下所示:

$scope.uniqueLists - {
    name: [
            'string1',
            'string2',
            'string3'
            // Lots of strings
    ],
    Category: [
            'string1',
            'string2',
            'string3'
            // Lots of strings
    ],
    designer: [
            'string1',
            'string2',
            'string3'
            // Lots of strings
    ]
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试从此列表中构建搜索功能.目前,我可以在页面上的复选框中显示所有列表项(下面的代码使用JadeNode/ExpressJS的模板引擎,即使你不熟悉它也很容易理解.Netnt ==子节点的它上面的线)

div(class="searchNav")
    p(ng-repeat="param in searchParams") {{param[0] + ' = ' + param[1]}}

    div.row-fluid(ng-repeat="(key,val) in uniqueLists")
        form(ng-model="???") {{key}}
            label.checkbox(ng-repeat="value in val")
                input(type="checkbox", ng-model="?????") 
                {{value}}
Run Code Online (Sandbox Code Playgroud)

我遇到问题的唯一部分是ng-model我的表格和复选框.我想要formng-model == {{key}}.我已经尝试过设置但是它打破了Angular.我也试过了,ng-model='uniqueLists[index][0]'但是,Angular并没有解析它,只是让每个表单的模型成为字符串uniqueLists[index][0] …

javascript mapping-model angularjs angularjs-ng-repeat

13
推荐指数
1
解决办法
2万
查看次数

核心数据迁移失败,"无法找到源存储的模型",但存在源的managedObjectModel

我有一个使用核心数据的cocoa应用程序,它现在是其托管对象模型的第4版.

我的托管对象模型包含抽象实体,但到目前为止,我已设法通过创建适当的映射模型并使用addPersistentStoreWithType创建我的持久存储来实现迁移:配置:options:error并将NSMigratePersistentStoresAutomaticallyOption设置为YES.

NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
NSURL *url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"MyApp.xml"]];
NSError *error=nil;
[theCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:optionsDictionary error:&error]
Run Code Online (Sandbox Code Playgroud)

当我从模型版本3迁移到4时,这种方法很有效,这是一个涉及向多个实体添加属性的迁移.现在,当我尝试添加新的模型版本(版本5)时,对addPersistentStoreWithType的调用返回nil,错误仍为空.从4迁移到5涉及添加单个属性.

我正在努力调试问题,并检查了以下所有内容;

  1. 源数据库实际上是版本4,而persistentStoreCoordinator的托管对象模型是版本5.

  2. 4-> 5映射模型以及版本4和5的托管对象模型存在于我构建的应用程序的resources文件夹中.

  3. 我尝试了各种模型升级路径.奇怪的是,我发现从早期版本3 - > 5升级工作..但从4 - > 5升级失败.

  4. 我已经尝试添加自定义实体迁移策略,用于迁移属性正在发生变化的实体...在这种情况下,我覆盖了方法beginEntityMapping:manager:error :. 有趣的是,当迁移工作时(即当我从3迁移到4或从3迁移到5)时,会调用此方法,但在失败的情况下(4到5)不会调用它.

关于在哪里继续,我几乎不知所措.任何有助于调试此问题的想法都将非常感激.

cocoa core-data core-data-migration mapping-model

12
推荐指数
1
解决办法
6507
查看次数

核心数据推断迁移 - 自动"轻量级"与手动

我已经以一些简单的方式更新了现有iPhone应用程序的模型(删除属性,添加属性,删除索引),并且可以使用自动轻量级迁移来迁移持久性存储.

由于数据集的典型大小,处理时间并不是无关紧要的,并且需要为用户提供反馈.

NSMigrationManager提供了一个简单但有用的migrationProgress值,可在执行迁移时发送KVO通知.这构成了提供反馈的基础,但是尝试使用推断的模型([NSMappingModel inferredMappingModelForSourceModel:destinationModel:error:])导致完全相同的数据集的时序截然不同.

原始iPhone(2G)上的配置文件结果,磁盘上的缓存大小:1.785 MB.

自动推断轻量级迁移

PROFILE: CacheManager -migrateStore
PROFILE:   0.6130 (+0.6130) models loaded
PROFILE:   1.1759 (+0.5629) delegate -CacheManagerWillMigrate:
PROFILE:   1.2516 (+0.0757) persistent store coordinator loaded
PROFILE:   5.1436 (+3.8920) automatic lightweight migration completed
PROFILE:   5.5435 (+0.3999) delegate -CacheManagerDidFinishMigration:withError:
Run Code Online (Sandbox Code Playgroud)

手动推断迁移

PROFILE: CacheManager -migrateStore
PROFILE:   0.6660 (+0.6660) models loaded
PROFILE:   1.1471 (+0.4811) inferred mapping model generated
PROFILE:   1.4046 (+0.2574) delegate -CacheManagerWillMigrate:
PROFILE:   1.5058 (+0.1013) persistent store coordinator loaded
PROFILE:   22.6952 (+21.1894) manual migration completed
PROFILE:   23.1478 …
Run Code Online (Sandbox Code Playgroud)

migration iphone core-data objective-c mapping-model

10
推荐指数
1
解决办法
2392
查看次数

核心数据迁移 - 无法找到迁移的映射模型

我按照这里找到的指南:http: //www.timisted.net/blog/archive/core-data-migration/ 但是当我使用新模型启动应用程序时,继续获取"无法找到迁移的映射模型" .我已经多次尝试过xcode 3和xcode 4,但是永远无法让它工作.

目前我的选项设置为:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    [NSNumber numberWithBool:NO], NSInferMappingModelAutomaticallyOption,
    nil];
Run Code Online (Sandbox Code Playgroud)

我之前为推断选项设置了YES,但之后它只是在没有调用我需要迁移的自定义策略的情况下进行迁移,我认为这是因为它之前无法找到映射模型.

我的测绘模型没有被提起的任何原因?我通过检查它的SVN版本,仔细检查了以前的模型没有进行任何更改.

谢谢.

iphone data-migration core-data objective-c mapping-model

9
推荐指数
1
解决办法
5759
查看次数

核心数据迁移问题:"持久存储迁移失败,缺少源管理对象模型."

的背景

  • 包含两个托管对象模型的Cocoa非文档核心数据项目.
  • 模型1保持不变.模型2已更改,因此我想迁移商店.
  • 我在Xcode中通过Design> Data Model> Add Model Version创建了一个新版本.
  • 版本之间的区别是单个关系,从一个关系变为一个关系.
  • 我对模型进行了更改,然后保存了.
  • 我制作了一个新的映射模型,它将旧模型作为源,将新模型作为目标.
  • 我已经确保所有映射模型和数据模型正在编译,并且所有映射模型和数据模型都被复制到我的应用程序包的Res​​ource文件夹中.
  • 我通过在添加持久存储时使用NSMigratePersistentStoresAutomaticallyOption 密钥传入字典来启用迁移 [NSNumber numberWithBool:YES].
  • 我没有合并捆绑中的所有模型,而是指定了我想要使用的两个模型(模型1和模型2的新版本)并使用它们合并它们 modelByMergingModels:

问题

无论我做什么迁移,我都会收到错误消息:

"持久存储迁移失败,缺少源管理对象模型."

我试过的

  • 每次构建后都会清理干净.
  • 我已经尝试了各种组合,只有我在资源中迁移的模型,正在编译或两者兼而有之.
  • 由于错误消息暗示它无法找到我的迁移的源模型,因此我尝试在Resources文件夹中编译每个版本的模型.
  • 通过切换回我的数据模型的原始版本,我已经确定我没有做出一个非常基本的错误.该应用运行正常.
  • 我删除了映射模型和模型的新版本,清理后再重新创建.
  • 我尝试在新模型中进行不同的更改 - 删除实体.

我的智慧结束了.

我不禁想到我在某个地方犯了一个很大的错误,我没有看到.有任何想法吗?

migration cocoa core-data objective-c mapping-model

8
推荐指数
2
解决办法
1万
查看次数

核心数据强制自定义映射模型/策略而不是轻量级迁移

我现在有大约4个不同版本的数据模型,除了最后一个版本之外的每个版本都只是使用自动轻量级迁移的一个小改动.对于这个最新的模型,我需要在迁移期间做一些额外的工作,所以我创建了一个自定义映射模型和一个迁移策略子类,其中包含createDestinations和createRelationships中的一些操作.问题是,我没有调用我的映射模型/自定义策略,而且似乎Core Data正在尝试执行轻量级迁移.我是否需要做些什么来保持轻量级迁移,但是当有可用的映射模型时使用我的映射模型?

migration iphone cocoa core-data mapping-model

8
推荐指数
1
解决办法
862
查看次数