问题标签 [core-data-migration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - 核心数据迁移的验证错误
我在 Mac OS X 10.5 上使用 Core Data 时遇到了一个非常烦人的错误。
我的应用程序中的所有实体都有共享相同名称的类。
到目前为止,我已经完成了 5 次迁移,没有出现任何问题。
我正在使用 XML 数据存储。我的数据模型 V5 有 13 个实体,其中 4 个是抽象的。它看起来像这样: 替代文本 http://synapticmishap.co.uk/ObjectModel.jpg
我所做的
创建我的数据模型的新版本 - 这是 V6。
添加一个新实体(JGToolbarWindow)并将父级设置为 JGWindowBase。
添加了从 V5 到 V6 的映射模型。保存了它。
将当前版本设置为 V6。
构建和调试。
我在 Persistent Store Coordinator 选项字典中打开了自动迁移。
问题
收到错误 - “发生多个验证错误。”
我设置了一个断点并检查了验证错误。有一长串验证错误——似乎每个数据条目都有一个。
似乎它正在剥离所有关系,并且由于我的属性之一 - 应用程序 - 被设置为必需,这被视为验证错误。
因此,问题似乎在于迁移无法迁移关系......即使就关系而言显然没有任何改变。
当我查看 ~/Library/Application Support/Name of my app/ 我看到一个 XML 数据存储,它的名称附加了 .xml.new 在文本编辑器中查看此文件时,所有关系确实已被剥离出去。
我试过的
创建一个新的 XML 数据存储并在其中放入一些项目,然后再试一次。我对每个项目都得到相同的错误。
清洁和重建。
确保先前验证中的旧 .xml.new 已被删除。
删除新模型版本并重复我的操作以确保我没有搞砸什么。
为每个抽象类添加映射条目,默认情况下会被忽略。添加了所有属性和关系。仍然是完全相同的错误。
尝试添加一个没有类的新实体,仅基于以 JGWindowBase 作为父级的 NSManagedObject。再一次,失败了。
我认为唯一改变的是模型底层类中的一些内部逻辑。但这些都是微小的变化,我无法理解它是如何顺利迁移的,现在不是什么都没有改变。
我已经尝试从重命名的最新数据存储进行全新迁移,并且遇到了完全相同的问题。这意味着我必须解决这个问题才能使任何数据迁移工作。
错误
当我在下面的 presentError 行设置断点时
并检查错误 userInfo,我收到很多这样的错误:
po (NSArray *)0x67ebfd0
给出:
所有这一切真正告诉我的是它删除了与项目相关的关系,这是一个必需的属性,这就是它告诉我存在验证错误的原因。应用程序也有一个完整的负载,这是另一个必需的属性。
在我看来,问题不在于验证错误本身,而在于它似乎根本没有迁移任何关系。
我用这个把头发拉出来。我真的非常感谢一些帮助。最后,引用《星球大战》中的一句话:
“帮帮我,Stack Overflow。你是我唯一的希望。”
cocoa - 核心数据:迁移具有自引用属性的实体
我的核心数据模型包含一个实体 Shape,它有两个自引用关系,这意味着四个属性。一对是一对多关系(Shape.containedBy <->> Shape.contains),另一对是多对多关系(Shape.nextShapes <<->> Shape.previousShapes)。这一切都在应用程序中完美运行,所以我不认为自引用关系通常是一个问题。
但是,在将模型迁移到新版本时,Xcode 无法编译自动生成的映射模型,并显示以下错误消息:
“包含”是自引用属性之一的名称。无论如何,真正的大问题是我什至无法查看此映射属性,因为在查看映射模型时,一旦我选择实体映射,Xcode 就会崩溃。所以我有点迷失从这里去哪里。我真的无法删除自引用属性,所以我想我已经手动创建了一个可以编译的映射模型?有任何想法吗?
干杯
ios - iPhone Core Data“自动轻量级迁移”
我正在尝试更新实现核心数据存储的应用程序。我正在向其中一个实体添加一个属性。
我将以下代码添加到我的委托类中:
这来自以下 URL: Doc
执行代码时出现以下错误:
2009-12-01 20:04:22.877
Shoppee[25633:207] 错误:错误
域=NSCocoaErrorDomain 代码=134130
UserInfo = 0x1624d20“操作无法完成。(可可错误134130。)”2009-12-01 20:04:22.879 Shoppee [25633:207]未解决的错误错误域= NSCocoaErrorDomain代码= 134130 UserInfo = 0x1624d20“操作无法完成已完成。(Cocoa 错误 134130。)",{ URL = file://localhost/Users/Eric/Library/Application%20Support/iPhone%20Simulator/User/Applications/A8A8FB73-9AB9-4EB7-8F83-82F5B4467AF1/Documents/MyApp .sqlite; 元数据 = { NSPersistenceFrameworkVersion = 241; NSStoreModelVersionHashes = { 项目 = <869d4b20 088e5c44 5c345006 87d245cd 67ab9bc4 14cadf45 180251e9 f741a98f>; 存储 = <47c250f4 895e6fd1 5033ab42 22d2d493 7819ba75 3c0acffc 2dc54515 8deeed7a>;}; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( ); NSStoreType = SQLite;NSStoreUUID = "8DC65301-3BC5-42BE-80B8-E44577B8F8E1"; }; reason = "找不到源存储的模型"; }
看起来我需要以某种方式包含原始数据模型,但我不知道该怎么做。有什么建议么?
iphone - 如何在 Core Data 迁移映射中拆分实体
看起来这应该是直截了当的,但我找不到一个很好的例子。我有一个简单的核心数据实体,我想将其拆分为两个单独的实体。Apple 的文档在较高级别(映射概述)中提到了它,但是,将与新拆分实体的关系关联回原始实体的实际映射模型应该是什么样子尚不清楚。
iphone - 使用 mergeModelFromBundles: 和版本控制 (CoreData)
我正在尝试使用 CoreData 中的迁移功能。我遵循了 Apple 文档。我在以下方法中遇到问题:
http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html上似乎有同样的问题
然而,我确实选择了 Apple 建议的方法,通过使用菜单选项“添加模型版本”。
你有什么主意吗?
mapping-model - 核心数据迁移 - “无法添加源存储”错误
在我的 iPhone 应用程序中,我使用的是 Core Data,并且我对无法自动迁移的数据模型进行了更改(即添加了新的关系)。我添加了数据模型版本(设计 -> 数据模型 -> 添加模型版本)并将我的新数据模型更改应用到新版本 2。然后我创建了一个映射对象模型并将源模型和目标模型设置为正确的数据模型(分别是旧的和新的)。
当我运行应用程序并调用persistentStoreCoordinator 时,我的应用程序会显示以下内容:
2010-02-27 02:40:30.922 XXXX[73578:20b] 未解决的错误错误域 = NSCocoaErrorDomain 代码 = 134110 用户信息 = 0xfc2240“操作无法完成。(可可错误 134110。)”,{ NSUnderlyingError = 错误域 = NSCocoaErrorDomain Code=134130 UserInfo=0xfbb3a0 "操作无法完成。(Cocoa 错误 134130.)"; reason = "无法添加源存储"; }
FWIW(我认为不多)我还在 persistentStoreCoordinator 中进行了通常的代码更改,以使用 NSMigratePersistentStoresAutomaticallyOption 和 NSInferMappingModelAutomaticallyOption (用于可以自动迁移的未来数据模型更改)。更相关的是,我的 managedObjectModel 是通过调用文件/资源类型为“momd”的 initWithContentsOfURL 创建的。
我尝试在映射模型(设计 -> 映射模型 -> 更新 XXX 模型)中更新源模型和目标模型,并删除映射模型并重新创建它。我已经清理和重建,但都无济于事。我仍然收到上述错误消息。
关于如何进一步调试或解决此问题的任何指示/想法?我没有发布任何代码片段,因为这感觉更像是构建环境问题(而且我的代码非常标准 - 只是使用映射模型处理迁移的常用核心数据代码,但我很乐意展示代码如果它有帮助)。
感谢任何帮助。
谢谢
iphone - 如何从 Core Data 自动轻量级迁移切换到手动?
我的情况与这个问题类似。我正在使用带有以下代码的轻量级迁移,来自 Apple 文档和其他 SO 线程的相当普通的。它在初始化 Core Data 堆栈时在应用程序启动时运行。
对于某些用户,尤其是使用速度较慢的设备的用户,我在指示行的日志中确认了崩溃。
我知道解决方法是将其切换为手动映射和迁移。这样做的秘诀是什么?对我来说,很长的路要走所有 Apple 文档,但我不记得有专门用于模式迁移的好的示例和教程。
core-data - 一对一关系到多对多关系的核心数据迁移
我有一个部署的应用程序,它从传感器(例如,温度°C、压力 kPa)中采样测量值。用户可以创建实验并收集样本。每个样本都存储为一个运行,因此从实验到运行之间存在一对多的关系。出于性能考虑,Run 与 Data 实体(存储实际原始数据的位置)是一对一的关系;这允许加载一些运行属性,而不必加载大量数据。
我们的大多数传感器都有多个测量值,因此最好存储所有实际采样的数据。但这意味着 Run <---> Data 关系需要变成 Run <-->> Data (使用 Xcode 的约定)。
我面临着尝试将数据从旧的 Run to-one Data 模型迁移到新的 Run to-many Data 模型。这可以使用映射模型来完成吗?如果是这样,是否有人对示例有任何指示?如果没有,有没有人有任何关于如何做到这一点的例子的指针?
感谢您的任何指示或建议。
iphone - 使用映射模型在核心数据对象模型之间迁移
我有一个相当简单的架构。本质上,运行 <--> 数据(其中运行包含从某种传感器采样的数据,例如温度)。
现在,传感器似乎可以进行不止一种测量(例如,温度和湿度)。因此,一次运行可能有多个数据样本。
因此,运行 <-->> 样本和样本 <--> 数据。(为了简单起见,我暂时将 Run <--> Data 留在原处。)
如果我创建了一个新的映射模型,那么事情通常会起作用 - 除了没有创建新的样本,运行和样本之间以及样本和数据之间没有建立任何关系。
我正在尝试使用映射模型来迁移我的模型,但即使对生成的映射模型进行最轻微的更改也会导致 Cocoa 错误 134110。
例如,如果我采用“Sample”映射(没有 Source)并将其 Source 设置为“Run”(以便我可以适当地设置 Sample 的反向关系“run”),则映射将其名称更改为“RunToSample”。此映射中处理了两种关系:数据和运行。数据属性自动设置为
FUNCTION($manager, "destinationInstancesForEntityMappingNamed:sourceInstances:" , "DataToData", $source.dataSet)
按照此示例,我将运行属性设置为
FUNCTION($manager, "destinationInstancesForEntityMappingNamed:sourceInstances:" , "RunToRun", $source)
同样,我将 RunToRun 中的“示例”属性映射设置为
FUNCTION($manager, "destinationInstancesForEntityMappingNamed:sourceInstances:" , "RunToSample", $source)
和 DataToData 中的“样本”属性
FUNCTION($manager, "destinationInstancesForEntityMappingNamed:sourceInstances:" , "RunToSample", $source.run)
那么,我想知道,出了什么问题?我尝试了各种排列,例如未指定“反向”关系。但是无论如何,我都会继续收到相同的错误(134110)。
我想这比看起来要容易得多,而且我缺少一些基本但次要的部分。我也尝试过继承 NSEntityMigrationPolicy 并覆盖 -createDestinationInstancesForSourceInstance: 但这些努力得到了大致相同的结果。
提前感谢您的任何指示或(相关的:-)建议。
编辑:为简单起见,我已将所有关系标记为可选。虽然,最终,我可能会选择其他方式。
iphone - 检测轻量级核心数据迁移
我正在成功使用 Core Data 的自动轻量级迁移。但是,当在迁移期间创建特定实体时,我想用一些数据填充它。当然,我可以在每次应用程序启动时检查实体是否为空,但是当 Core Data 具有迁移框架时,这似乎效率低下。
是否可以检测轻量级迁移何时发生(可能使用 KVO 或通知),或者这是否需要实施标准迁移?
我试过使用NSPersistentStoreCoordinatorStoresDidChangeNotification
,但发生迁移时它不会触发。