由于关系发生变化而导致错误

时间:2017-03-01 10:16:27

标签: swift xcode core-data

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

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

***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'不可接受的值类型为   to-many relationship:property =“eventDec”;期望的类型= NSSet;   给定type = EventDec; value =(实体:   EventDec; id:0x60800022bcc0    ;   数据:{       eventSchedule = nil;       eventStatus = 0; })'

如何摆脱此错误?

2 个答案:

答案 0 :(得分:2)

这: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")

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

答案 1 :(得分:1)

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

[硬解决方案] 如果您已经在appstore上发布了应用程序,那么您应该将模型回滚到发布时的模型,然后根据更改创建新模型

[简易解决方案] 如果您是该应用的唯一使用者,并且您仍在开发中,则没有理由制作模型版本。只需从手机(和/或模拟器)中删除并重新安装即可。基于旧版本的SQL文件将不复存在。