Rei*_*ner 4 xcode warnings core-data build swift
我将CoreData添加到我的应用程序中MY_APP:
xcdatamodeld包含XXX具有几个属性的单个实体的文件来定义数据模型。 XXX+CoreDataClass.swift并且XXX+CoreDataProperties.swift。 问题:
在构建阶段开始时,我收到3条警告:
warning: The Swift file "/Users/reiner/Library/Developer/Xcode/DerivedData/
MY_APP/Build/Intermediates.noindex/MY_APP.build/Debug-iphonesimulator/
MY_APP.build/DerivedSources/CoreDataGenerated/MY_APP/XXX+CoreDataClass.swift"
cannot be processed by a Copy Bundle Resources build phase (in target ‚MY_APP‘)
warning: The Swift file "/Users/reiner/Library/Developer/Xcode/DerivedData/
MY_APP/Build/Intermediates.noindex/MY_APP.build/Debug-iphonesimulator/
MY_APP.build/DerivedSources/CoreDataGenerated/MY_APP/XXX+CoreDataProperties.swift"
cannot be processed by a Copy Bundle Resources build phase (in target 'MY_APP')
warning: The Swift file "/Users/reiner/Library/Developer/Xcode/DerivedData/
MY_APP/Build/Intermediates.noindex/MY_APP.build/Debug-iphonesimulator/
MY_APP.build/DerivedSources/CoreDataGenerated/MY_APP/MY_APP+CoreDataModel.swift"
cannot be processed by a Copy Bundle Resources build phase (in target 'MY_APP')
Run Code Online (Sandbox Code Playgroud)
这3个文件未在MY_APP目标/构建阶段/副本捆绑资源下列出。
我的问题:
构建设置有什么问题,即这些警告的原因是什么,我该如何避免?
备注:此问题与其他框架(核心数据)有关,但与该框架相似,尚无答案。
编辑:
我的项目有2个目标,用于iOS和watchOS。到目前为止,核心数据仅在iOS上使用。
我现在尝试也为watchOS启用它,但出现错误,因为.xcdatamodeld尚未在Build Phases / Copy Bundle Resources中。
我在其中添加后,核心数据就在手表上正确执行了。
但是: 我得到了与上面提到的相同的3条警告,这次是针对手表扩展目标(总共6条警告)。
也许这是一个有用的提示。
编辑:
我联系了苹果公司,他们提供了一个解决方案:
在启用coreData选项的情况下创建Xcode项目“ xxx”时,将创建核心数据模型文件“ xxx.xcdatamodeld”,并将其添加到目标“构建阶段”编译源中。
比方说,有人在其中添加了实体“ Entity”和属性“ attribute”。
如果在Xcode项目导航器中选择该模型文件并打开文件检查器,则将存在一个“代码生成”条目,默认情况下将其设置为Swift。这将自动创建2个文件Entity + CoreDataClass.swift和Entity + CoreDataProperties.swift,但它们不会显示在项目导航器中。
构建项目成功,可以像往常一样在代码中使用Entity.attribute属性。
但是:
如果在Xcode导航器中选择了xcdatamodeld文件,则Xcode编辑器菜单将具有“创建NSManagedObject子类…”条目。如果选择此条目,然后选择xxx数据模型,则会再次创建2个文件Entity + CoreDataClass.swift和Entity + CoreDataProperties.swift,并显示在项目导航器中,并默认添加到目标中。
这意味着这些文件被添加了两次,因此出现了警告。
因此解决方案是不使用此编辑器命令,而且我不知道它的用途是……
编辑2:
我的错; 我看错地方了:
如果选择此选项,则不会从xcdatamodeld自动生成任何代码,即,可以手动(通过使用editor命令)创建NSManagedObject子类,并根据需要将其添加到目标“编译源”部分。
先前的答案:
显然,有两种使用CoreData的方法,一种是:仅使用PROJECT.xcdatamodeld文件,然后将其添加到“ 编译源构建阶段”,或者2)NSManagedObject使用Xcode的Editor / Create NSManagedObject Subclass命令创建子类。
如果使用1),则一切正常,但没有人可以访问所使用的实体。
如果使用2),Xcode将创建2个文件ENTITY+CoreDataClass.swift和ENTITY+CoreDataProperties.swift。这两个文件已添加到“ 编译源构建”阶段,但PROJECT.xcdatamodeld一定不能。如果有人这样做,则会出现构建错误“意外的重复任务”。但是,如果没有,则该项目的构建不会出现错误和警告。
但是,运行时,指令
let entity = NSEntityDescription.entity(forEntityName: "MyEntity", in: managedContext)!
Run Code Online (Sandbox Code Playgroud)
失败,因为它找不到数据模型。
一种解决方法是添加PROJECT.xcdatamodeld到目标/构建阶段/副本捆绑资源。然后,代码可以正常执行,但是将收到我在问题中描述的警告。
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |