【发布时间】:2021-12-05 20:26:00
【问题描述】:
我有一个名为 Skeins 的实体,它似乎失去了两个属性,我不知道为什么:
func insertSkein(brand: String, code: String, type: String, description: String, discontinued: Bool) throws {
let sk = Skeins(context: self.context)
sk.id = UUID()
sk.brand = brand
sk.code = code
sk.type = type.capitalized
sk.skeindesc = description.capitalized
sk.discontinued = discontinued
self.context.insert(sk)
do{
try self.context.save()
}
catch{
print("error inserting skein: \(error)")
}
}
如果我在插入行查看 sk 的状态,我可以看到:
<Skeins: 0x600002ba1e00> (entity: Skeins; id: 0x6000008ab100 <x-coredata:///Skeins/t9792D8DC-F6B0-4644-BD81-4CC63CE05B0F2>; data: {
brand = TestBrand;
brandcode = TestBrandTestCode;
code = TestCode;
discontinued = 0;
id = "F1C7929C-C271-477D-B12F-0B3A11C13008";
projectSkeins = (
);
sharedSkeinProjects = (
);
正如您所见, skeindesc 和 type 都丢失了(参数中肯定都有值),而且我在数据库文件中定义字符串的方式上找不到任何区别,所以我被卡住了!任何建议都会很棒:)
谢谢, 贝基
【问题讨论】:
-
您是否对您的核心数据模型进行了任何更改?可能是您需要清理构建文件夹,以免使用旧版本。
-
不,这已经存在很长时间了 - 我只是因为我正在编写测试而发现它,而这两个属性失败了,因为它们没有任何值/丢失了。
-
可能不是您问题的原因,但无需致电
insert;您在创建实体时指定了上下文,因此它已经插入到上下文中 -
不确定这是否相关,但是当对象已经存在于上下文中时,您为什么要这样做
self.context.insert? -
对于这些类型的错误,我建议你在 Xcode 中建立一个新项目并在那里调试。也许复制您的 .xcdatamodel 文件,看看是否可以重现该问题。也许稍后添加模型文件,直到您找出问题为止。
标签: ios swift database core-data