【问题标题】:CoreData seems to be losing attributes?CoreData 似乎正在失去属性?
【发布时间】: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


【解决方案1】:

感谢大家为此提供的 cmets - 花了几天时间对此感到沮丧,然后随机选择了一个不同的模拟器,它运行良好。所以最好的猜测是,当我将项目指向 iOS 14 -> iOS 15 时,模拟器变得很困惑。经验教训 - 如果我要对项目进行重大更改,请务必清除模拟器!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多