我创建了一个带有实体“新闻”的CoreData模型:
我将它设置为“Manuel / None”并创建了一个NSManagedObject:
public class News: NSManagedObject {
@NSManaged var id: String
@NSManaged var newsType: Int16
@NSManaged var newsImageUrl: String
@NSManaged var newsVideoUrl: String
@NSManaged var newsTitle: String
@NSManaged var newsDesc: String
}
我想覆盖我的实体的属性而不触及CoreData模型,只需这样做:
extension News {
@NSManaged var newsUrl: String
}
当然,如果我这样做:
news.newsUrl = ""
我得到了一个很好的
原因:' - [NSManagedObject setNewsUrl:]:无法识别的选择器
如何在我的实体中添加正确的新属性(不修改CoreData模型),当然,我希望将此新闻属性保存在CoreData中?
TY
答案 0 :(得分:1)
您尝试的方法不起作用,因为仅仅声明新属性还不够,您必须在数据模型中存在该属性。如果您不编辑模型,则必须在代码中完成工作。
您可以在代码中修改整个模型,直到开始使用。加载持久性存储文件后,必须将对象模型视为只读。基本步骤是
NSManagedObjectModel
询问entities
或entitiesByName
。NSEntityDescription
。NSAttributeDescription
。properties
数组。这不是一个好主意,我强烈建议不要这样做,但这并非不可能。在核心数据编码的多年中,我只在代码中修改了一次模型,以解决模型编译器中的(自固定的)错误。
请注意,这不会让您避免进行模型迁移。持久性存储文件必须与您使用的数据模型匹配。在代码中修改模型将使管理模型版本更加困难,并且会增加应用程序崩溃的几率,因为模型不匹配。