【问题标题】:Error due to change in relationship因关系改变而产生的错误
【发布时间】:2017-03-01 10:16:27
【问题描述】:

当我将以下关系从 one-to-one 更改为 one-to-many 时,我收到以下错误消息

eventSch?.setValue(eventDesc, forKey: "eventDec")
eventDesc.setValue(eventSch, forKey: "eventSchedule")

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不可接受的值类型 多对多关系:property = "eventDec";所需类型 = NSSet; 给定类型 = EventDec;价值=(实体: 事件十二月;编号:0x60800022bcc0 ; 数据: { eventSchedule = nil; 事件状态 = 0; })。'

如何摆脱这个错误?

【问题讨论】:

  • 你制作了新的模型版本吗?如果您只是在开发中,您可以简单地删除并重新安装。
  • 不,我没有制作新版本。你的意思是删除模型并重新安装?
  • 假设eventScheduleeventDec 是反向关系,你不需要同时设置。最简单的就是设置to-one结束关系(CoreData会自动更新逆向),所以删除第一行就行了。
  • @pbasdf,实际上你的解决方案解决了我所有的问题。非常感谢:) :)

标签: swift xcode core-data


【解决方案1】:

这:eventSch?.setValue(eventDesc, forKey: "eventDec") 导致错误,因为您提供了一个实体;相反,您应该提供一个 NSSet。

我不太了解 Objective-C;但是,您的代码应该类似于以下内容:

NSMutableSet* eventDescSet = [NSMutableSet set];
[eventDescSet addObject: eventDesc];  // you have your set with one item
eventSch?.setValue(eventDescSet, forKey: "eventDec")

另外,为了清楚起见,我会使用更具描述性的名称。

【讨论】:

  • 感谢您的解释,我的代码很快 :)
  • 抱歉 :)。看到你在使用 KVO,我错误地认为它是 Objective-C。
【解决方案2】:

您的设备上有一个基于旧版本的 SQL 文件,因此当应用尝试基于新模型加载它时,它无法弄清楚如何读取它。

[硬解]如果您的应用已经在应用商店发布,那么您应该将模型回滚到发布时的状态,然后根据您的更改创建一个新模型.

[简单的解决方案]如果您是唯一拥有该应用程序的人,并且您仍处于开发阶段,则没有理由制作模型版本。只需从您的手机(和/或模拟器)中删除并重新安装。基于旧版本的 SQL 文件将消失。

【讨论】:

  • 是的,除了我上面说的问题,我也遇到了这个问题
猜你喜欢
  • 1970-01-01
  • 2019-07-18
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多