使用 swift 3 和 Xcode 8 beta 子类化 NSManagedObject

Subclassing NSManagedObject with swift 3 and Xcode 8 beta

我已经开始尝试在 swift 3 和 Xcode 8 beta 中使用核心数据。当我尝试从核心数据模型生成 NSManagedObject 子类并在编辑器菜单中创建 NSManagedObject 子类...选项时,Xcode 8 beta 生成三个文件,其中一个是 _COREDATA_DATAMODELNAME_ +CoreDataModel.swift 包含以下内容:

import Foundation
import CoreData

___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___

另外,这个文件的内容显示了两个警告:

Expressions are not allowed at the top level.
Use of unresolved identifier '___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___'

有没有人遇到同样的问题?这个新文件是什么意思?

谢谢

这可能是与新的自动子类生成的(测试版)冲突,可以在数据模型文件的实体检查器中控制。

来自documentation (What's New In Core Data)

Xcode automatic subclass generation

Xcode now supports automatic generation of NSManagedObject subclasses in the modeling tool. In the entity inspector:

  • Manual/None is the default, and previous behavior; in this case you should implement your own subclass or use NSManagedObject.
  • Category/Extension generates a class extension in a file named like ClassName+CoreDataGeneratedProperties. You need to declare/implement the main class (if in Obj-C, via a header the extension can import named ClassName.h). -
  • Class Definition generates subclass files named like ClassName+CoreDataClass as well as the files generated for Category/Extension.

The generated files are placed in DerivedData and rebuilt on the first build after the model is saved. They are also indexed by Xcode, so command-clicking on references and fast-opening by filename works.

我在这个开发者测试版中遇到了类似的问题 Xcode 8。其中一些问题在我离开数据模型或生成 NSManagedObject 子类之前解决了 Command + S(保存更改)。我不知道为什么,但在我的情况下,自动保存有时不起作用,并且会出现一些错误。

我 运行 解决了上面引用的 .swift 文件的问题,发现注释掉 ___COREDATA... 行让我暂时遇到了错误。我不确定它应该完成什么。

我还发现 XCODE 8 倾向于忘记添加到 CoreData 实体的新字段,并反复将 CoreData 模型代码生成目标重置为 Objective C,从而导致重新生成文件时,会出现一连串的 .h 和 .m 文件,而不是 swift 文件。我看到的大多数问题都与 CoreData 相关,但到目前为止都是可行的。

除此之外,XCODE 8 在使用具有 25 个数据实体和 30 多个视图控制器的应用程序时出奇地稳定,所以我没有抱怨。