因关系改变而产生的错误
Posted
技术标签:
【中文标题】因关系改变而产生的错误【英文标题】: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; )。'
如何摆脱这个错误?
【问题讨论】:
你制作了新的模型版本吗?如果您只是在开发中,您可以简单地删除并重新安装。 不,我没有制作新版本。你的意思是删除模型并重新安装? 假设eventSchedule
和eventDec
是反向关系,你不需要同时设置。最简单的就是设置to-one
结束关系(CoreData会自动更新逆向),所以删除第一行就行了。
@pbasdf,实际上你的解决方案解决了我所有的问题。非常感谢:) :)
【参考方案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 文件将消失。
【讨论】:
是的,除了我上面说的问题,我也遇到了这个问题以上是关于因关系改变而产生的错误的主要内容,如果未能解决你的问题,请参考以下文章
RxJava observeOn()与subscribeOn()的关系