spi*_*ght 39 core-data ios swift xcode8
我一直在尝试添加核心数据.每次我得到同样的错误:
error: filename "EntityName +CoreDataClass.swift" used twice: '/Users/userName/Desktop/Development/MyApp/AppName/EntityName +CoreDataClass.swift' and '/Users/userName/Library/Developer/Xcode/DerivedData/AppName-dgwzrmxsetzvtedibxrazuutjwnh/Build/Intermediates/AppName.build/Debug-iphoneos/AppName.build/DerivedSources/CoreDataGenerated/Model/EntityName +CoreDataClass.swift'
Run Code Online (Sandbox Code Playgroud)
我使用以下步骤添加核心数据:
1.New file/DataModel; 将它保存在我的项目的根目录中,
选择Model.xcdatamodeld并添加实体,添加几个属性,保存,编辑/创建NSManagedObjectClass子类.
因此,我在导航器中观察到4个新文件:Model.xcdatamodeld,EntityName + CoreDataProperties.swift,EntityName + CoreDataClass.swift,_COREDATA_DATAMODELNAME_ + CoreDataModel.swift
他们的内容: _COREDATA_DATAMODELNAME_ + CoreDataModel.swift:
import Foundation
import CoreData
___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___
Run Code Online (Sandbox Code Playgroud)
EntityName + CoreDataClass.swift:
import Foundation
import CoreData
class EntityName: NSManagedObject {
}
Run Code Online (Sandbox Code Playgroud)
实体名称+ CoreDataProperties.swift:
import Foundation
import CoreData
extension EntityName {
@nonobjc class func fetchRequest() -> NSFetchRequest< EntityName > {
return NSFetchRequest< EntityName >(entityName: "EntityName");
}
@NSManaged var str: String?
}
Run Code Online (Sandbox Code Playgroud)
我尝试过:
1.清理构建,删除DerivedData,删除var /文件夹的内容,重启
2.删除生成的文件,在导航器中显示
我所有的努力都没有运气.
我做错了什么?
Dav*_*idA 52
XCode 8中有两个错误:
1 - 如果更改Codegen下拉列表,则其新值不会保存在Model.xcdatamodel中.您必须更改其他内容才能保存.例如,更改类名; 建立; 改回班级名称; 再建一次.
2 - 生成的代码放在Intermediates文件夹中的DerivedData中,但只有在文件夹不存在时才会发生.解决方法是执行清理然后构建.
Tom*_*ton 45
NSManagedObject当模型文件使用Xcode 8文件格式时,Xcode 8包括自动类生成.如果您创建自己的子类文件,则表示您正在创建重复项.错误消息中的第二个文件DerivedSources是Xcode自动创建的文件.
如果自动生成的文件能够满足您的需求,那就停止创建自己的文件,您就可以了.
如果您想要创建自己的子类,您也可以
rus*_*ish 12
我实际上遇到了同样的问题(使用Swift),并怀疑它是一个bug.如果我正确理解OP正在使用Xcode的autogen NSManagedObject子类,那么随后就不会创建额外的(多余的)子类,这似乎是一些混乱的根源.
重现步骤:
创建一个新项目,单一视图应用程序.勾选"使用核心数据"
在模型实体中创建实体,添加属性,确保保存文件(如果未明确保存,有时Xcode 8 Beta会抛出数据)
Xcode创建3个文件:
COREDATA_DATAMODELNAME_ + CoreDataModel.swift.此文件已损坏,并且包含导入Foundation和CoreData的语句后面的无效条目 - 除非删除此文件,否则项目将无法编译
import Foundation
import CoreData
___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___
Run Code Online (Sandbox Code Playgroud)实体名称+ CoreDataClass.swift
实体名称+ CoreDataProperties.swift
虽然编辑器此时没有标记任何错误,但由于OP列出的原因(即缺少具有相同名称但在DerivedData文件夹中带有'.'前缀的文件),尝试编译失败
如果在创建模型后手动创建NSManagedObject子类而不使用Xcode明显错误的auto-gen,则没有问题.打字更多但更可靠!但是,您需要从"干净"项目开始(即在尝试自动生成子类之前),否则错误仍然存在.清理派生数据无济于事.
*****更新*****似乎确实有一些奇怪的事情,似乎确实存在最初建议的静默代码生成(道歉),但这与人们的期望非常不同.此外,这个代码在编辑器中不可见(这似乎有点无意义和混乱).它是在DerivedData> Build> Intermediates> .Build的子文件夹中创建的.
我完全可以理解为什么OP被混淆了(就像我一样!)对于它的价值而言,这个'功能'无疑是一种有用的尝试,但如果你习惯了以前的行为并且你有一个生成选项,那就有点令人困惑主菜单中的可见和可编辑副本.
因此,在Codegen窗口中选择"Manual/None"(如下所示),然后您可以使用菜单栏中的auto-gen选项(删除'junk'后)或编写自己的代码.
跟着这些步骤,
通过将实体的"Codegen"设置设置为"Manual/None",可以单独禁用每个实体的自动生成.
将实体名称更改为其他名称以使其保存.例如,更改类名; 建立; 改回班级名称; 再建一次.
| 归档时间: |
|
| 查看次数: |
16396 次 |
| 最近记录: |