标签: core-data-migration

在iOS应用程序中同步核心数据数据库

我对Core Data迁移有疑问.

假设我有一个在表A中有一些预定义值的应用程序.我想将它与另一个数据库同步,使用表B,这样当新记录添加到B时,该记录应该添加到我的表A中.

我知道使用Core Data迁移,当我向表中添加列时,我将能够在添加列之前访问先前存储在旧表中的值.

我想知道如何使用另一个表上添加的记录更新我的表.

更新:

来自以下评论:

我想到的问题是......我想发布我的应用程序的更新.我坚持如何更新现有的核心数据数据库,该数据库也存储用户输入的数据.我需要做的就是更新一些记录并保留当前的用户数据.我该怎么做呢?

iphone core-data core-data-migration

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

使用Core Data跳过痛苦的迁移并转移到新的数据模型

当我甚至不关心旧数据时,我花了很多时间将核心数据按摩到新的迁移中.每次我更改数据模型时,有没有办法只删除所有现有数据并跳转到新数据模型,而不是处理映射模型的麻烦?

cocoa core-data objective-c core-data-migration

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

编辑模型后缺少映射模型

我正在手动进行核心数据迁移,并且继续遇到可可错误134140:NSMigrationMissingMappingModelError。我注意到,只要对模型进行任何更改,即使将属性标记为可选,都可能发生这种情况。到目前为止,发生这种情况时,我发现的唯一解决方案是删除映射模型并创建新的映射模型。有没有更好,更乏味的解决方案?

migration xcode core-data core-data-migration ios

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

iOS8.1核心数据轻量级+重量级迁移

我有我的核心数据库的第1版.(简化示例)

在此输入图像描述

我对模型进行了一些更改,制作了V2.这涉及创建具有type属性加上其他一些的新实体.该类型属性是链接到该的实体. 在此输入图像描述

我的应用程序的新版本已发布,数据迁移正常,因为它是轻量级的.出于我自己的原因,我此时没有建立关系.

一段时间后,我决定对结构做一些更大的改动,创建新的实体FixtureTypePlateTypeImage.然后我创建了一些关系.这给了我模特的V3.

在此输入图像描述

由于这种修改的性质,我需要进行从V2到V3的重量级迁移,包括复制属性数据,填充新属性以及设置关系.因此,我设置了一个映射模型,创建了必要的迁移策略并点击了go按钮.

这适用于V2到V3但是当测试从V1到V3的迁移时,我得到一系列错误......,例如

reason =无法就地迁移存储:验证错误缺少必需目标关系上的属性值

我正在使用以下PSC选项:

NSDictionary *options = @{
                          NSMigratePersistentStoresAutomaticallyOption : @YES,
                          NSInferMappingModelAutomaticallyOption : @YES
                          };


if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
Run Code Online (Sandbox Code Playgroud)

那么,我的查询是核心数据如何迁移数据?它是顺序的,所以我从V1到V2轻量级迁移,然后重量级V2到V3,还是从V1迁移到V3?如果是这样,我是否需要为V1到V3创建迁移策略(让事情变得笨拙以便涵盖所有组合)?

此外,一旦我开始使用重量级,我现在失去了轻量级迁移设施吗?

建议和意见表示赞赏.

macos core-data core-data-migration ios

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

轻量级迁移swift2 xcode7

我必须在我的coreData项目中添加一个实体,但我无法理解如何在swift中进行轻量级迁移.我坚持第8点,我如何将代码从objective-c转换为swift?谢谢!

1 - 打开.xcdatamodeld文件

2单击编辑器

3 - 选择添加型号版本...

4 - 添加模型的新版本(添加了新的数据模型组)

5 - 选择主文件,打开文件检查器(右侧面板)

6-和版本化的核心数据模型选择当前数据模型7的新版本数据模型 - 这不是全部)你应该执行所谓的"轻度迁移".

8 - 转到AppDelegate并找到正在创建persistentStoreCoordinator的位置

9-找到这一行if(![_ persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])

使用@ {NSMigratePersistentStoresAutomaticallyOption替换nil选项:@YES,NSInferMappingModelAutomaticallyOption:@YES}(实际在该方法的注释代码中提供)

11-你去,玩得开心!

core-data-migration ios swift

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

当我将新模型添加到我的 .xcdatamodeld 文件时,我是否需要进行核心数据迁移

我有一个已经有 2 个实体的 .xcdatamodeld,我在这个文件中添加了另一个实体(我不确定这是否是添加新实体的正确方法),无论如何我的问题是,我需要实现任何类型的迁移以照顾已在其设备上安装该应用程序的用户。

请注意,我没有修改现有实体的任何列或架构。

干杯。

core-data-migration ios

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

防止升级用户的 CoreData 崩溃

大约一年半前,我构建了一个应用程序,我将再次使用它。这是我开始学习 Swift 的项目,很明显,从那时起,语言和我的 Swift 能力都发生了很大变化。

昨天,我第一次更新了我的单个 CoreData 模型以添加一个可选的字符串属性。我做了文件生成位并确保在检查器列中正确选择了新的数据模型。

在我的模拟器和测试设备上,我需要删除旧版本的应用程序才能安装新版本,否则我会崩溃。我认为这只是开发环境过程的一部分。如何确保升级用户在从 App Store 进行简单更新时不必删除和重新安装?我假设 Xcode/CoreData/Apple 已经通过一些用户不可见的内部脚本或进程来处理这个问题,“它只是有效。” 但我想在此处发布此内容,以了解是否需要做任何其他事情来确保用户从 v1 平滑过渡到 v1.1。

正如我所提到的,我所做的只是一个可选的字符串列。我假设所有现有的用户数据都将迁移到新模式,新字段为nil.

这里的任何想法都将受到欢迎和赞赏。谢谢!

xcode core-data core-data-migration swift swift3

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

核心数据:具有自引用属性的迁移实体

My Core Data模型包含一个实体Shape,它有两个自引用关系,这意味着四个属性.一对是一对多关系(Shape.containedBy < - >> Shape.contains),另一对是多对多关系(Shape.nextShapes << - >> Shape.previousShapes).这一切都在应用程序中完美运行,因此我不认为自引用关系通常是一个问题.

但是,在将模型迁移到新版本时,Xcode无法编译自动生成的映射模型,并显示以下错误消息:

2009-10-30 17:10:09.387 mapc[18619:607] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "FUNCTION($manager ,'destinationInstancesForSourceRelationshipNamed:sourceInstances:' , 'contains' , $source.contains) == 1"'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00007fff80d735a4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x00007fff83f0a313 objc_exception_throw + 45
    2   Foundation                          0x00007fff819bc8d4 _qfqp2_performParsing + 8412
    3   Foundation                          0x00007fff819ba79d +[NSPredicate predicateWithFormat:arguments:] + 59
    4   Foundation                          0x00007fff81a482ef +[NSExpression expressionWithFormat:arguments:] + 68
    5   Foundation                          0x00007fff81a48843 …
Run Code Online (Sandbox Code Playgroud)

cocoa core-data core-data-migration self-reference mapping-model

0
推荐指数
1
解决办法
1272
查看次数

使用PersistentStore的iOS应用程序coreData作为静态sqlite数据迁移?

该应用程序使用bundle目录中的静态sqlite(初始数据)作为Coredata的持久存储.sqlite有7个表,其中一个表通过添加额外的列/字段进行修改.如何让coreData了解持久存储(存储)已更改并且需要采用新更新?对于sqlite有什么样的版本概念,就像我们为coredata做的那样吗?

sqlite core-data objective-c core-data-migration ios

0
推荐指数
1
解决办法
129
查看次数

无法初始化应用程序的已保存数据

我最近更改了实体内部属性的类型.我在数据库的新模型版本之前创建.但有些东西不能正常工作.如果我运行该项目,应用程序将抛出一个错误:

无法初始化应用程序的已保存数据

并在控制台中写道:

2016-01-04 23:21:16.805 toRep_Management [36979:10809172] CoreData:错误:-addPersistentStoreWithType:XML配置:(null)URL:file:///Users/Tom/Library/Application%20Support/de.toEducate. toRep_Management/CocoaAppCD.storedata选项:{NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1; } ...返回错误错误Domain = NSCocoaErrorDomain Code = 134140"持久存储迁移失败,缺少映射模型." UserInfo = {sourceModel =()isEditable 1,entities {Notice ="()name Notice,managedObjectClassName toRep_Management.Notice,renamingIdentifier Notice,isAbstract 0,superentity name(null),properties {\n displayEndDate = \"(),name displayEndDate ,isOptional 1,isTransient 0,entity Notice,renamingIdentifier displayEndDate,validation predicates(\n),warnings(\n),versionHashModifier(null)\n userInfo {\n},attributeType 900,attributeValueClassName NSDate,defaultValue(null)\" ; \n displayStartDate = \"(),名称displayStartDate,isOptional 1,isTransient 0,entity Notice,renamingIdentifier displayStartDate,validation predicates(\n),warnings(\n),versionHashModifier(null)\n userInfo {\n}, attributeType 900,attributeValueClassName NSDate,defaultValue(null)\"; \n isOnline = \"(),name isOnline,isOptional 1,isTransient 0,entity Notice,renamingIdentifier isOnline,validation predicates(\n),warnings(\n), versionHashModifier(null)\n userInfo {\n},attributeType 800,att ributeValueClassName NSNumber,defaultValue(null)\"; \n …

macos cocoa core-data core-data-migration swift

0
推荐指数
2
解决办法
3196
查看次数