[Core Data]Xcode 8+ 新建NSManageObject subclass方法

在新版的Xcode中, 转换Core Data实体(Entity)为对象模型时, 无法直接新建** NSManageObject subclass ** 了, 即: File-> New -> File... 中Core Data 栏没有了 NSManageObject subclass 选项 :


[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第1张图片
Core Data下没有NSManageObject subclass选项
新的方法

选中xxx.xcdatamodeld文件后, 选中导航栏: Editor -> Create NSManagedObject Subclass...


[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第2张图片
新的方法

之后, 就和之前的步骤一样了, 选择需要转换为模型的实体(Entity)即可!

[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第3张图片
选择实体

这时, 新建的文件是这样的:

[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第4张图片

是不是和之前的不太一样, 这里需要我们手动将People+CoreDataClass.h与People+CoreDataClass.m修改为:
People.h和People.m:

[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第5张图片

但是, 这样会报错:

Swift项目中会报如下错误错:

[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第6张图片
'PeopleEntity' is ambiguous for type lookup in this context
'PeopleEntity' is ambiguous for type lookup in this context

Objective-C 项目中会报如下错误:

[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第7张图片

只有这个错误, 没有详细信息;

解决方法

以上错误的解决方法是一样的, 如下:
在创建 ** NSManageObject subclass **之前, 修改一下实体(Entity)对象的属性:

[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第8张图片

将上图中 4 这里修改为Manual/None 即可:

[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第9张图片

即:

[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第10张图片

然后再去创建NSManageObject subclass就OK了;
这时新建的文件为:

[Core Data]Xcode 8+ 新建NSManageObject subclass方法_第11张图片
g

如果看着不舒服, 可以将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"

你可能感兴趣的:([Core Data]Xcode 8+ 新建NSManageObject subclass方法)