Xcode 9.2(Sierra 10.12.6)中Core Data完全故障求助
解决Xcode 9.2(Sierra 10.12.6)下Core Data功能失效的方案
我之前帮朋友踩过Xcode 9.2在Sierra 10.12.6上的Core Data坑,给你几个亲测有效的排查方向:
彻底清理项目缓存与派生数据
这是解决这类奇怪编译错误的第一要务,尤其是你刚修改了codegen设置的情况下:- 用快捷键
Cmd+Shift+K执行Clean Build Folder; - 打开Xcode的
Preferences > Locations,找到Derived Data的路径,手动删除整个文件夹; - 重启Xcode后重新编译项目。
旧的自动生成类文件可能残存在缓存里,和你的手动实现冲突,导致大量报错。
- 用快捷键
核对手动实体类与数据模型的一致性
确认每个实体对应的手动类(OC的.h/.m或Swift的.swift)里的属性、关系和数据模型完全匹配:- 属性名、类型必须严格一致,比如模型里是
NSNumber*类型的年龄,代码里不能写成NSString*; - Swift项目要确保类名和实体的Class字段完全一致,包括命名空间(如果项目有配置的话),Xcode 9.x对类名匹配的容错率很低。
- 属性名、类型必须严格一致,比如模型里是
检查数据模型文件是否损坏
Xcode 9的模型编辑器偶尔会出现隐藏的文件损坏问题,导致Core Data无法正常解析:- 新建一个空白的
.xcdatamodeld文件; - 把原模型里的实体、属性、关系逐个复制到新模型中;
- 重新关联手动实体类,再编译试试。
- 新建一个空白的
验证项目级别的Build Settings配置
有时候单个实体的codegen设置会被项目全局设置覆盖:- 搜索Build Settings里的
Core Data Code Generation相关选项,确保全局设置也是Manual/None; - OC项目还要检查
Objective-C Generated Interface Header Name,Swift项目检查Swift Compiler - General下的相关配置,避免和手动类生成冲突。
- 搜索Build Settings里的
备选方案:升级Xcode或系统
Xcode 9.2在Sierra上确实存在一些Core Data的已知bug,如果上面的方法都无效,可以试试升级到Xcode 9.4.1(这是Sierra支持的最高Xcode版本),或者临时升级系统到High Sierra,不过这是最后没办法的选择。
内容的提问来源于stack exchange,提问作者Gavin Craft
相关产品推荐
相关产品推荐

