xcode - 核心数据 - 无法将空字符串设置为属性的默认值

标签 xcode core-data migration string

我的数据模型中有一个实体,其字符串属性当前是可选的,我想将其转换为默认值为空字符串的必需属性。

正如其他人发现的那样,在 Xcode Core Data 数据建模器中将默认值留空会导致验证错误(因为设计者将其解释为 NULL),但尝试将 ''、""或 @""作为默认值导致这些文字字符被解释为默认字符,而不是根据需要解释为空的零长度字符串。

我确实找到了this thread然而,在 Google 上,除了解决方案非常丑陋(模型定义在 .xcdatamodel 和 objc 源之间分割)之外,它也不适用于轻量级迁移,因为这些迁移完全基于.xcdatamodel 文件和实体实现中的 objc 逻辑未加载。

有什么方法可以在数据模型设计器中实现这一点吗?

最佳答案

这是一个非常有趣的问题。经过一些测试后,我认为这是不可能的,因为数据模型中文本字段的配置方式。

原则上,您可以使用 \u2205 的 unicode 空集字符来表示默认的空字符串,但文本字段似乎不接受任何转义,因此它会转换任何转义的尝试unicode 字符代码到代码字符本身的文字字符串,例如输入 '\u2205' 最终会变成文字文本 '\u2205'。

理论上,您可以编写一个实用程序应用程序来读取以图形方式生成的托管对象模型文件,然后以编程方式将属性默认设置为等于空字符串,然后将文件保存回磁盘。我说“理论上”是因为没有记录的方法可以从代码中保存托管对象模型文件。您可以读取并在内存中修改它,但不能保留更改。

我认为有点疏忽。

我认为您别无选择,只能在模型首次加载时实用地设置默认空字符串。这很简单,但很丑陋,你必须记住你所做的(特别是如果你迁移版本),但我认为现在这是唯一的选择。

关于xcode - 核心数据 - 无法将空字符串设置为属性的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5154708/

相关文章:

mysql - 我可以自动重命名/替换 2 个或更多表和 View 吗?

用于本地化的 Xcode 11 导出不起作用,禁用包括屏幕截图功能,并且在测试日志中找不到 XCUITest 屏幕截图附件

ios - 为什么我的 ModalView 以纵向模式显示?

ios - 在 Objective-C Project 的 Swift 文件中导入 Objective-C 类

ios - 非法尝试在不同上下文中的对象之间建立关系 'checklists'

iphone - NSFetchedResultsController 的部分名称与托管对象值不匹配

laravel - 如何使用 laravel 迁移在 mysql 8 中为 json 列设置索引

ios - "Please use a provisioning profile associated with team ID"尝试分发IOS应用程序时

objective-c - 获取一对多核心数据关系第一次返回正确的对象,但其他时间返回空集

node.js - Knexfile不读取环境变量?