美文网首页
[Core Data]Xcode 8+ 新建NSManageOb

[Core Data]Xcode 8+ 新建NSManageOb

作者: 流火绯瞳 | 来源:发表于2017-07-01 14:26 被阅读491次

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


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
'PeopleEntity' is ambiguous for type lookup in this context

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

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

解决方法

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

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

即:

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

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+ 新建NSManageOb

      本文链接:https://www.haomeiwen.com/subject/ocyucxtx.html