【问题标题】:Core Data code generation causes build failureCore Data 代码生成导致构建失败
【发布时间】: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 字段保留为当前项目,我只是删除了空的导入语句。我还没有使用代码生成。

标签: xcode core-data xcode8


【解决方案1】:

数据模型检查器中实体的Module 字段中有一个值,我删除了它,所以现在它是空的,占位符显示为“全局命名空间”。这似乎奏效了!

【讨论】:

  • 那个,我不得不删除 Xcode 8 创建的@nonobjc public class func fetchRequest() -&gt; NSFetchRequest&lt;Item&gt; { return NSFetchRequest&lt;Item&gt;(entityName: "Item"); }Item 在这种情况下是实体名称。
【解决方案2】:

Core Data 严重基于字符串。为您的实体使用诸如“实体”之类的名称可能会导致意外结果。还要避免在数据模型中使用名称,例如“description”、“item”或“attribute”等。如果您确实想使用这些名称,请在它们前面加上:“My_entity”或“ACEntity”之类的名称就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多