Xcode中如何重命名Core Data的xcdatamodeld模型内部内容?
解决xcdatamodeld内部模型重命名问题
我之前也碰到过一模一样的困扰!不用把所有内容迁移到新模型,按下面的步骤操作就能搞定,亲测有效:
操作步骤(一定要先关闭Xcode!)
- 找到你的
.xcdatamodeld文件,右键选择显示包内容,你会看到里面的核心模型文件(比如旧名称是OldModel.xcdatamodel)。 - 把这个
.xcdatamodel文件重命名为你想要的新名称,比如NewModel.xcdatamodel。 - 用文本编辑器(比如TextEdit、VS Code)打开重命名后的
.xcdatamodel文件里的contents文件,找到<name>标签,将旧名称替换为新名称:<!-- 原来的内容 --> <name>OldModel</name> <!-- 修改后 --> <name>NewModel</name> - 回到
.xcdatamodeld包的外层,再次右键选择显示包内容,打开里面的.xccurrentversion文件,把版本标识符改成新的模型文件名:<!-- 原来的内容 --> <version identifier="OldModel.xcdatamodel"/> <!-- 修改后 --> <version identifier="NewModel.xcdatamodel"/> - 重新打开Xcode,你会发现导航路径里的模型名称已经更新为新名称了。
关键注意事项
- 不要直接在访达里重命名
.xcdatamodeld后就结束,必须同步修改内部的版本配置和模型文件的内部名称,否则Xcode会找不到对应模型导致加载失败,这就是你之前遇到的问题。 - 如果你使用了codegen > class definition自动生成实体类,只要实体本身的名称没改,不需要手动修改类文件,重新编译项目后Xcode会自动关联新模型的实体。
- 操作前建议备份一下整个
.xcdatamodeld文件夹,以防操作失误丢失数据。
代码适配
最后别忘了在代码里把加载模型的路径改成新名称,比如:
// 原来的旧模型加载代码 // let modelURL = Bundle.main.url(forResource: "OldModel", withExtension: "xcdatamodeld")! // 修改后的新模型加载代码 let modelURL = Bundle.main.url(forResource: "NewModel", withExtension: "xcdatamodeld")! let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL)!
内容的提问来源于stack exchange,提问作者Alex Stone
相关产品推荐
相关产品推荐

