在新版的Xcode中, 转换Core Data实体(Entity)为对象模型时, 无法直接新建** NSManageObject subclass ** 了, 即: File-> New -> File... 中Core Data 栏没有了 NSManageObject subclass 选项 :
新的方法
选中xxx.xcdatamodeld文件后, 选中导航栏: Editor -> Create NSManagedObject Subclass...
之后, 就和之前的步骤一样了, 选择需要转换为模型的实体(Entity)即可!
这时, 新建的文件是这样的:
是不是和之前的不太一样, 这里需要我们手动将People+CoreDataClass.h与People+CoreDataClass.m修改为:
People.h和People.m:
但是, 这样会报错:
Swift项目中会报如下错误错:
'PeopleEntity' is ambiguous for type lookup in this context
Objective-C 项目中会报如下错误:
只有这个错误, 没有详细信息;
解决方法
以上错误的解决方法是一样的, 如下:
在创建 ** NSManageObject subclass **之前, 修改一下实体(Entity)对象的属性:
将上图中 4 这里修改为Manual/None 即可:
即:
然后再去创建NSManageObject subclass就OK了;
这时新建的文件为:
如果看着不舒服, 可以将ManEntity+CoreDataClass.swift/PeopleEntity+CoreDataClass.swift改为ManEntity.swift/PeopleEntity.swift, 其实不改也不会报错, 也不会影响使用.
然后就可以使用了:
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
let man: ManEntity = NSEntityDescription.insertNewObject(forEntityName: "Man", into: context) as! ManEntity
man.name = "zhangsan"