首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift codegen文件错误

swift codegen文件错误
EN

Stack Overflow用户
提问于 2018-02-17 16:52:16
回答 1查看 252关注 0票数 1

在使用coredate时,我使用了选项codegen: category/extension来创建一个文件,在这个文件中我可以放入可重用的代码来查找、更新或删除数据库条目。我首先使用codegen option Class定义启动了coredata实体,并在稍后将其更改为category/extension。

现在我遇到一个编译错误:“属性不能声明为公共的,因为它的类型使用了内部类型”。

文件名是一个生成的快速文件,名为: Gameresults+Coredataproperties.swift

我得到了播放器的错误: TournamentPlayer?

玩家和轮都是与另一个实体的关系。

代码语言:javascript
复制
import Foundation
import CoreData

extension GameResults {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<GameResults> {
        return NSFetchRequest<GameResults>(entityName: "GameResults")
    }

    @NSManaged public var earnedRankingPoints: Int16
    @NSManaged public var framePoints: Int16
    @NSManaged public var highestBreak: Int16
    @NSManaged public var isWon: Bool
    @NSManaged public var player: TournamentPlayer?
    @NSManaged public var round: Rounds?

}

我不敢相信错误真的来自swift,所以我尝试了干净的构建文件夹选项,保存文件,退出XCode等,但都没有起作用。

如何解决这个问题,有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2018-02-17 18:05:52

对编解码器使用Manual/None选项。

这里有几件事你应该考虑一下。

  1. 当你使用codegen时,它会自动创建与你的实体等价的所有类作为公共类。我假设TournamentPlayer类不是公共的,并且您已经自己定义了它。因此,根据默认定义,它是内部的,编译器会正确地给出错误。您在这里唯一能做的就是更改访问级别,因为您正在使用codegen,这意味着您想要更改您的模型,所以最好将您的TournamentPlayer更改为公共。尽管它取决于application.
  2. The的体系结构,但只要您更改模型,代码生成器就会自动重新生成,并保存在DerivedData.
  3. If中。

如果您想自己处理它,请将其设置为手动,并手动处理代码生成。

查看这篇文章,它让您更好地理解codegen https://useyourloaf.com/blog/core-data-code-generation/

还有一件事,当您更改为manual/none时,您必须进行干净的构建,否则它仍然使用DerivedData中生成的代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48839575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档