问题标签 [mapping-model]
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.
iphone - 通过迁移将核心数据索引添加到某些属性
出于性能原因,我想为我的一些实体设置索引属性。我创建了一个新的核心数据模型版本来执行更改。Core Data 检测到更改并将我的模型迁移到新版本,但是,NO INDEXES ARE GENERATED。
如果我从头开始重新创建数据库,则索引就在那里。我在 iPhone 和模拟器上都使用 SQLite 浏览器进行了检查。仅当先前格式的数据库已经存在时,才会出现此问题。
有没有办法手动添加索引?为此写一些sql?还是我错过了什么?我已经做了一些更关键的迁移,那里没有问题。但是那些缺失的索引让我很烦。
感谢您的帮助!
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 - iPhone核心数据迁移日期到字符串
我有一个最初以日期属性开头的实体。除了保留原始字段之外,我现在添加了一个属性,该属性是我想要保存日期的字符串。我已经制作了一个映射模型,但我不确定在迁移期间将什么放入“值表达式”以获取新的字符串字段,其中填充了格式为“2010-10-25”的日期字段中的数据。
任何帮助,将不胜感激。
我也需要它是一个真实的属性而不是瞬态的,因为我想对它进行排序。我没有意识到你不能对瞬态属性进行排序,直到为时已晚。
objective-c - Core Data 的推断映射模型创建(轻量级迁移)崩溃。线程问题?
在我的应用程序中创建推断映射模型(使用 Core Data 的轻量级迁移)时,我遇到了随机崩溃。顺便说一句,我必须在我的应用程序运行时以编程方式执行它。
这就是我创建这个模型的方式(当然,在我制作了正确的 currentModel 和 newModel 对象之后):
NSMappingModel *mappingModel = [NSMappingModel inferredMappingModelForSourceModel:currentModel destinationModel:newModel error:&error];
问题是这样的:此方法随机崩溃。当它工作时,它工作得很好,没有问题。但是当它崩溃时,它会使我的应用程序崩溃(而不是返回 nil 来表示该方法失败,因为它应该)。随机,我的意思是有时会发生,有时不会。这是不可预测的。
现在,这是交易:我在另一个线程中运行这个方法。更准确地说,它位于通过 GCD 传递以在全局主队列上运行的块内。我需要这样做以使我的 UI 对用户来说显得清晰,即这样我就可以在工作进行时显示进度指示器。
奇怪的是,如果我删除 GCD 的东西并让它在主线程上运行,它似乎工作正常并且永远不会崩溃。因此,可能是因为我在另一个线程上运行它而导致崩溃?
我不知何故觉得这很奇怪,因为我不相信我违反了任何关于多线程的 Core Data 规则。特别是,我没有传递任何托管对象,并且每当我需要访问 MOC 时,我都会创建一个新的 MOC,即我不依赖任何之前创建的 MOC(或就此而言:任何东西)在主线程上。除了发生的一些 MOC 东西之外,发生在映射模型创建方法之后,即在应用程序崩溃的点之后,所以它不可能是这里考虑的崩溃的原因。
我所做的只是获取两个 MOM 并要求它们之间的映射模型。即使在线程下也不会出错,现在可以吗?
关于可能发生的事情有什么想法吗?
objective-c - 核心数据迁移问题:“持久存储迁移失败,缺少源托管对象模型。”
的背景
- 具有两个托管对象模型的 Cocoa 非文档核心数据项目。
- 模型 1 保持不变。Model 2 变了,所以想迁移店铺。
- 我在 Xcode 中通过 Design > Data Model > Add Model Version 创建了一个新版本。
- 版本之间的区别在于已从一对多更改为单一关系。
- 我已经对模型进行了更改,然后保存了。
- 我制作了一个新的映射模型,其中旧模型作为源,新模型作为目标。
- 我已确保所有映射模型和数据模型都在编译中,并且都被复制到我的应用程序包的 Resource 文件夹中。
- 我已经通过在
添加持久存储时使用带有
NSMigratePersistentStoresAutomaticallyOption
键的字典来打开迁移。[NSNumber numberWithBool:YES]
- 我没有合并捆绑包中的所有模型,而是指定了我要使用的两个模型(模型 1 和模型 2 的新版本)并使用
modelByMergingModels:
问题
无论我做什么迁移,我都会收到错误消息:
“持久存储迁移失败,缺少源托管对象模型。”
我试过的
- 我在每次构建后进行清洁。
- 我已经尝试了各种组合,只有在资源中迁移到的模型、正在编译的模型,或两者兼而有之。
- 由于错误消息暗示它找不到用于我的迁移的源模型,因此我尝试将模型的每个版本都放在 Resources 文件夹中并进行编译。
- 通过切换回我的数据模型的原始版本,我确保我没有犯一个真正的基本错误。该应用程序运行良好。
- 我删除了映射模型和模型的新版本,清理,然后重新创建两者。
- 我尝试在新模型中进行不同的更改 - 改为删除实体。
我无计可施。
我不禁认为我在某个我没有看到的地方犯了一个巨大的错误。有任何想法吗?
objective-c - NSMappingModel 的程序化创建
我想以编程方式(没有轻量级迁移)在两个完全相同的模型之间创建一个映射模型,除了一个实体(有一堆实体)具有不同的属性。我们称这个实体为“人”。假设目标模型有
1) 添加了一个名为“地址”的新属性
2)删除了一个名为“eyeColor”的属性
3)保留(即不做任何事情)一个名为“name”的属性
您将如何以编程方式在这些模型之间创建 NSMappingModel?我碰巧有一些明确的问题可以帮助我自己做到这一点:
Q1)我是否必须为“Person”以外的所有实体创建 NSEntityMapping 对象,即使它们保持不变?
Q2) 我如何处理“Person”中的“address”属性,这是一个正在创建的新属性?我是否应该以某种方式为此创建一个 NSPropertyMapping ,这将什么都没有变成某种东西(“地址”)?
Q3) 如何处理“Person”中的“name”属性?我是否必须为此创建一个 NSPropertyMapping,即使它保持不变?
Q4) 对于“Person”对应的 NSEntityMapping,是否为“eyeColor”创建任何 NSPropertyMapping 是删除它的正确方法?或者我应该为“eyeColor”创建一个 NSPropertyMapping?如果是,该对象将如何创建,即,什么将确定其目的是摆脱“eyeColor”?
提前谢谢你,我很抱歉自己无法回答这些问题,因为文档确实没有关于如何以编程方式创建 NSMappingModels 的好例子。再次注意,我不允许使用轻量级迁移。我必须手动执行此操作。
iphone - 核心数据推断迁移——自动“轻量级”与手动
我已经以一些简单的方式(删除属性、添加属性、删除索引)更新了现有 iPhone 应用程序的模型,并且可以使用自动轻量级迁移来迁移持久存储。
由于数据集的典型大小,处理时间并非微不足道,并且需要为用户提供反馈。
NSMigrationManager
提供了一个简单但有用的migrationProgress
值,用于在执行迁移时发送 KVO 通知。这构成了提供反馈的基础,但是尝试使用推断模型 ( [NSMappingModel inferredMappingModelForSourceModel:destinationModel:error:]
) 会导致完全相同的数据集的时间完全不同。
原始 iPhone (2G) 上的配置文件结果,缓存大小:磁盘上的 1.785 MB。
自动推断轻量级迁移
手动推断迁移
因此,使用推断模型,手动迁移的时间是自动迁移的 5 倍以上!
更新:模型加载
“迁移选项”的核心数据文档说:NSPersistentStoreCoordinator
NSInferMappingModelAutomaticallyOption
...如果找不到映射模型,协调器将尝试推断映射模型。
这就是为什么 XCode 构建、编译和捆绑的映射模型必须被移除(或只是非目标)以允许推断和轻量级迁移发生。
这是一个很大的不一致之处,而且轻量级选项NSPersistentStoreCoordinator -addPersistentStoreWithType:configuration:URL:options:error:
在处理时绝对不提供进度指示。
migrationProgress
任何人都可以提供一种在自动迁移期间获取值的受支持方式,或者一种将推断映射模型配置为在手动处理期间与自动处理一样快的方式吗?
更新:错误报告
与 WWDC 的工程师交谈,他们要求提供错误报告,要求migrationProgress
进行自动轻量级迁移处理。
如果更新 API 以添加进度报告,我会再次更新。
core-data - How do I get a new version of a xcdatamodel to appear in xcode?
Environment: xcode 3.2.1, document-based core-data application.
I have a document-based cocoa app which uses core data. I have made multiple versions of the data model Xcode shows a xcdatamodeld directory with multiple xcdatamodels (versions) that I made over time. (I also have the appropriate mapping models). All works fine, but now when I want to create a new version, xcode refuses to show the new xcdatamodel. The file is actually created; I can see it in the finder if I go into the xcdatamodeld package.
Has anyone run into this behaviour? Is there a fix? Perhaps my xcodeproj file is corrupted somehow?
Thanks, Martin
objective-c - CoreData:从 2 个模型迁移
我有通用的应用模型,发布后任何机构都可以为它做插件,这个插件可以确定与我的通用数据库合并的新数据库部分。一段时间后,我将发布新的数据库版本^,插件编写者可能会发布他们的数据库的新版本。所以我需要将合并数据库的旧版本映射到新版本。我怎么能这样做?
iphone - 如何从 Core Data 自动轻量级迁移切换到手动?
我的情况与这个问题类似。我正在使用带有以下代码的轻量级迁移,来自 Apple 文档和其他 SO 线程的相当普通的。它在初始化 Core Data 堆栈时在应用程序启动时运行。
对于某些用户,尤其是使用速度较慢的设备的用户,我在指示行的日志中确认了崩溃。
我知道解决方法是将其切换为手动映射和迁移。这样做的秘诀是什么?对我来说,很长的路要走所有 Apple 文档,但我不记得有专门用于模式迁移的好的示例和教程。