gpt4 book ai didi

ios - 创建 NSManagedObject 子类后程序无法编译

转载 作者:行者123 更新时间:2023-11-28 07:35:17 25 4
gpt4 key购买 nike

当我创建 NSManagedObject 子类时,程序不想编译时出现一个未分类的错误 -

"Command CompileSwiftSources failed with a nonzero exit code" 

并且还为每个子类文件创建一个错误,说“

Multiple commands produce '/Users/myName/Library/Developer/Xcode/DerivedData/CoreDataError-cqtxdlgmsibvltbxuxzvrapubhlp/Build/Intermediates.noindex/CoreDataError.build/Debug-iphonesimulator/CoreDataError.build/Objects-normal/x86_64/Person+CoreDataProperties.o':

这是我的数据模型。 enter image description here My data model

这是错误日志 enter image description here

我尝试将build设置更改为 Legacy Build System,但也没有帮助。

最佳答案

大多数时候,当您确实创建了两次 NSManagedObject 类(或其属性)时,就会发生这种情况。

在您的例子中,您已经通过编辑器菜单命令为类 Friend 和 Person 创建了代码。然后您将这些模块集成到您的项目中。所以编译器编译这些类。

但是

您很可能没有更改 CoreData 类生成选项。您可以在检查器的 CoreData Pane 中找到此选项(Class 部分,Codegen 菜单)。它可以采用 3 个值:“手动/无”、“类定义”或“类别/扩展”。

我猜你一直使用默认的“类定义”,这意味着当 XCode 编译你的模型时,它会为你的每个实体临时生成 swift 模块,并编译这些模块。因此,您最终得到 2 个名为“Friend”的模块和 2 个名为“Person”的模块。因此错误。

你想使用编辑器生成的模块,很可能是因为你想修改它们,那么你应该将代码生成菜单设置为“手动/无”或“类别/扩展”。您可以在每个实体的基础上执行此操作。

一些一致的用例:

  • 您有一个实体,您只是不想触及任何东西:将“类定义”保留为 Codegen 选项,不要使用编辑器生成类代码,让 XCode 做所有事情。
  • 你有一个实体,你想修改它,例如你想添加一些 awakeFromInsert 手动代码。但是,您希望 XCode 在更改属性时继续为属性生成访问器。为模块生成代码,将其包含在您的项目中(但不包括属性的扩展名),修改它,但保留“类别/扩展名”作为生成选项。
  • 您想自己管理一切:生成一次实体代码,将其包含在您的项目中,然后选择“手动/无”。现在请注意,当您更改某些属性/关系时,您需要手动保持代码同步。

关于ios - 创建 NSManagedObject 子类后程序无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53325896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com