【问题标题】:How to validate managed objects stored sqlite file with Core Data如何使用 Core Data 验证托管对象存储的 sqlite 文件
【发布时间】:2015-02-10 21:29:37
【问题描述】:
  1. 我已经设置了核心数据堆栈,并对实体进行了一些验证 属性;
  2. 将一些托管对象存储到 sqlite 文件中;
  3. 手动损坏 sqlite 文件中的托管对象数据,使其无法 使用验证谓词进行验证。

但是在那之后我仍然可以获取具有无效值的对象。

我的问题是是否可以验证 sqlite 文件,以便确保获取具有有效值的托管对象?

我知道addPersistentStoreWithType:configuration:URL:options:error: 检查架构完整性,但我想检查存储的数据是否通过模型验证。

【问题讨论】:

  • 据我所知,验证应用于托管对象上下文中的对象,并在保存上下文时进行检查(或显式调用验证方法)。我认为从持久存储文件加载时不会完成验证。
  • @MartinR 我可以在获取后进行验证,但我很艰难,我可能错过了一些东西,并且有明确的方法可以做到这一点,而无需手动获取/验证。
  • 您如何“手动破坏”数据?就像@MartinR 所说,Core Data 的验证方案在保存数据时适用。您是否在应用外部编辑 SQLite 文件?
  • @TomHarrington 是的,我正在使用 sqlite3 实用程序,但这只是为了检查 Core Data 如何与包含一些无效数据的商店一起工作。我需要这个验证来处理用户提供的 sqlite 文件。 XML 有NSValidateXMLStoreOption,但据我所知,sqlite 没有。

标签: objective-c validation core-data swift


【解决方案1】:

Core Data 不支持在获取数据时自动验证数据。内置验证方案仅在保存更改或您特别请求时适用。托管对象必须通过其实体的验证规则,否则保存失败。

如果您需要在获取值时对其进行验证,则需要编写自己的验证代码。 NSManagedObject 上有一些方法可以根据请求执行验证——validateForUpdate: 和检查整个对象的类似方法可能是您需要的。

确实,正如您在评论中提到的那样,有一个名为NSValidateXMLStoreOption 的标志,但它仅根据其DTD 检查XML 存储。它确保您拥有有效的 XML,但并不意味着运行 Core Data 验证检查。

【讨论】:

  • 好的,谢谢。我想 fetch 和 validate 会为我工作。
猜你喜欢
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多