关于Xcode 8 的coredata建模问题

问题

在Xcode 升级到 8 以上的版本后,可视界面创建CoreData模型.xcdatamodeld后使用Editor->Create NSManagedObject Subclass后会发生编译错误 : duplicate error

错误原因:

Xcode8.0中包含了一个自动生成NSManagedObject的机制,如果你打开该机制则会在project(Derived Data目录中)实际生成的DerivedSources文件夹中出现同名的源代码文件。

也就是说 就算你不新建这个类的文件,编译器已经是会有这个文件的了(所以可以直接在你的代码直接调用.xcdatamodeld中定义的entity,而无需创建文件)

个人看法:
此功能有好有坏:

  • 好的方面:在代码编码的角度来看,数据库的entity应该独立出来管理,与entity相关的东西都不应该写在entity的类中,如果遵循这种编码思想来编码的话,无疑这个功能会使我们少做创建类的步骤

  • 坏的方面:开源的很多开源coredata工具库都会让开发者在entity类中实现类似

+(NSString *)primaryKey

等方法来定制每一种entity的功能、属性、用法等。

解决问题

  • 如果是原本就进行逻辑隔离或没有使用任何的库:
    删掉创建的类,直接在你想调用的地方直接打出Entity的名称,你会发现会有提示(的确是很方便的功能)

*如果引用了库或想在类中添加逻辑方法:
1 . 打开你的.xcdatamodeld文件
2 . 选中你的entity,修改tools version为7.3(顺带提醒language不要错了),修改codegen

关于Xcode 8 的coredata建模问题_第1张图片
第一步

关于Xcode 8 的coredata建模问题_第2张图片
第二步

3 .然后就可以按照xcode8之前的做法一样,创建一个类,而且这个时候并不会duplicate error了

PS

**由于xcode抽风,上面修改的东西有可能不能真实被保存,如果修改后依然有问题,请试试以下操作 : **

  • Xcode的顶部选项 -> File -> save
  • Xcode的顶部选项 -> Product -> clean
  • 重启Xcode查看修改是否真正被应用

你可能感兴趣的:(关于Xcode 8 的coredata建模问题)