Core Data 代码生成导致构建失败
Posted
技术标签:
【中文标题】Core Data 代码生成导致构建失败【英文标题】:Core Data code generation causes build failure 【发布时间】:2016-09-17 09:22:34 【问题描述】:我正在使用新的 Xcode 8 代码生成功能为我的 Core Data 模型使用 Class Definition
作为 Codegen
选项。
当我构建时,我的每个实体都会得到以下输出:
<unknown>:0: error: no such file or directory: ‘/path/to/DerivedSources/CoreDataGenerated/Model/.Entity+CoreDataClass.swift'
<unknown>:0: error: no such file or directory: ‘/path/to/DerivedSources/CoreDataGenerated/Model/.Entity+CoreDataProperties.swift’
...
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1
在检查文件时,我可以看到以下内容:
Entity+CoreDataClass.swift:
import Foundation
import CoreData
public class Entity: NSManagedObject
Entity+CoreDataProperties.swift
import Foundation
import CoreData
import
extension Entity
@nonobjc public class func fetchRequest() -> NSFetchRequest<Entity>
return NSFetchRequest<Entity>(entityName: “Entity");
@NSManaged public var title: String?
在第二个中,不应该出现的明显的事情是空的 import 语句,我猜这是导致崩溃的原因。
我会做错什么吗?这是一个错误吗?
我已经尝试了所有通常的、干净的、干净的构建文件夹,但没有成功重新启动 Xcode/Mac。
【问题讨论】:
我也得到了空的导入语句。似乎是一个新的 Apple 错误。 看起来问题应该以比实际更好的方式处理。你看到我下面的修复了吗?看来我还是做错了事 是的,我发现了一个问题:当创建新的托管对象并将它们转换为我的子类之一时,它会抛出说它无法转换。类名位于当前项目命名空间之外的命名空间中。 我现在也在构建和测试应用程序时也遇到了同样的问题。你知道解决方法吗? 我将Module
字段保留为当前项目,我只是删除了空的导入语句。我还没有使用代码生成。
【参考方案1】:
数据模型检查器中实体的Module
字段中有一个值,我删除了它,所以现在它是空的,占位符显示为“全局命名空间”。这似乎奏效了!
【讨论】:
那个,我不得不删除 Xcode 8 创建的@nonobjc public class func fetchRequest() -> NSFetchRequest<Item> return NSFetchRequest<Item>(entityName: "Item");
。 Item
在这种情况下是实体名称。【参考方案2】:
Core Data 严重基于字符串。为您的实体使用诸如“实体”之类的名称可能会导致意外结果。还要避免在数据模型中使用名称,例如“description”、“item”或“attribute”等。如果您确实想使用这些名称,请在它们前面加上:“My_entity”或“ACEntity”之类的名称就可以了。
【讨论】:
以上是关于Core Data 代码生成导致构建失败的主要内容,如果未能解决你的问题,请参考以下文章
NSArrayController 子类添加 Core Data 对象需要啥?