我实现了核心数据迁移,因为我需要向我的CoreData模型添加一个新属性。
我所做的就是:
然后我将属性添加到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'"更新
我不认为错误消息与此问题有关,因为即使在取消迁移步骤时,也会显示错误消息。
发布于 2021-10-14 12:03:27
问题似乎源于xcdatamodel的目标成员资格被禁用。一旦我添加了目标成员资格,它就会像预期的那样工作。
https://stackoverflow.com/questions/69558583
复制相似问题