swift - Swift 中的轻量级核心数据迁移问题
问题描述
我已经实现了核心数据迁移,因为我需要向我的 CoreData 模型添加一个新属性。
我所做的基本上是:
- 创建新的模型版本。
- 编辑新模型版本。
- 在创建 persistentStoreCoordinator 时将选项 NSMigratePersistentStoresAutomaticallyOption 和 NSInferMappingModelAutomaticallyOption 设置为 YES。
- 将当前版本设置为新版本。
然后我将属性添加到NSManagedObject
类:
extension Clip {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Clip> {
return NSFetchRequest<Clip>(entityName: "Clip")
}
@NSManaged public var text: String?
@NSManaged public var date: String?
@NSManaged public var hidden: NSNumber?
@NSManaged public var desc: String?
@NSManaged public var pinned: NSNumber?
@NSManaged public var tag: String? //new
}
我将新项目保存到核心数据中,如下所示:
var filteredClips = [Clip]()
func appendNewItem(text: String, desc: String?){
let entityDescription = NSEntityDescription.entity(forEntityName: "Clip", in: managedContext)!
let newItem = Clip.init(entity: entityDescription, insertInto: managedContext)
newItem.text = text.trimmingCharacters(in: .whitespacesAndNewlines)
newItem.date = getDate()
newItem.desc = desc
newItem.tag = "favourite" //new attribute
newItem.hidden = false
filteredClips.append(newItem)
try! managedContext.save()
}
无法将项目添加到 coredata 数组。我在启动时收到此错误消息:
"Failed to call designated initializer on NSManagedObject class 'Clip'"
更新
我认为该错误消息与此问题无关,因为即使撤消迁移步骤也会出现此问题。
解决方案
似乎问题源于,xcdatamodel
主应用程序的目标成员资格被禁用。一旦我添加了目标成员,它就会按预期工作。
推荐阅读
- gatsby - 使用 gatsby-transformer-sharp 时将空字符串作为图像路径处理
- git - 如何删除我的回购历史记录中的第一个提交?
- java - Springfox - 手动,以编程方式添加模型
- android - 来自 Chilkat 库的 CkFtp2 类上的 Android 应用程序崩溃
- python - 沿轴的 Matplotlib 值选择器小部件
- vue.js - 元素未定义,因为它尚未呈现。如何等待?
- code-signing - 预签名自解压 EXE 文件
- vue.js - “vue create NewProjectsName”和“vue init webpack NewProjectsName”的区别?
- sqlite - 在 netbeans 中连接加密的 .sqlite 文件
- wordpress - 如何让 do_shortcode() 停止剥离简码的内容?