Swift CoreData NSManagedObject 子类
Posted
技术标签:
【中文标题】Swift CoreData NSManagedObject 子类【英文标题】:Swift CoreData NSManagedObject subclass 【发布时间】:2016-11-02 22:22:34 【问题描述】:我最近想试用 CoreData 及其强大的功能,所以我找到了一个简单的教程,并在遵循它的同时,创建了一个包含实体和关系的 .xcdatamodeld 文件。
我现在想做的是把它变成类(在 Xcode 8.1 版(8B62)和 Xcode 8.2 版测试版(8C23)上试过)
为此,我打开了我的模型文件,点击了Editor --> Create NSManagedObject subclasses。 这样做并选择我的两个实体会生成 4 个类,两个 NSManagedObject 类,每个类都有一个扩展。
在添加或者生成这四个文件之后,Xcode 不会编译项目并输出以下错误:
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1
有时它还会说:Invalid redeclaration of [Managed Object Name]
任何见解都会很棒,我应该在不使用模型的情况下自己创建类吗?还是 CoreData 在 Objc 中工作?然后我会切换到那个......
【问题讨论】:
【参考方案1】:Xcode 8 增加了对自动生成 Core Data 子类的支持,您可以在文档 What's New in Core Data in macOS 10.12, ios 10.0, tvOS 10.0, and watchOS 3.0 中了解相关内容。新项目启用了自动代码生成,因此当您手动创建 NSManagedObject 子类时,您会创建重复项,这会导致编译器错误。
有两种方法可以解决此问题。首先,您可以删除手动创建的 NSManagedObject 子类。其次,您可以通过从 Codegen 菜单中选择 Manual/None 从数据模型检查器中关闭数据模型的自动代码生成。如果您正在学习教程,我建议您使用第二个选项,因为该教程很可能是在 Apple 添加自动 Core Data 子类生成之前编写的。
您可以在以下文章中了解有关 Core Data 代码生成的更多信息:
Core Data Code Generation
【讨论】:
哦,所以 Xcode 会根据您在 Model 中定义的内容自动创建隐藏的 Swift 类?所以我仍然可以在代码中使用它们,但它们没有显示给我? 我对您的问题的最佳猜测是肯定的,但我没有使用自动子类生成。正如我在回答末尾所说,如果您正在学习教程,则应关闭自动子类生成。以上是关于Swift CoreData NSManagedObject 子类的主要内容,如果未能解决你的问题,请参考以下文章