我有以下核心数据模型:
我正在尝试从REST API调用中收到的JSON更新Speaker和TalkSlot之间的多对多关系。
我已经尝试过几十种方法,用一对多的方式替换多对多的方式,从一侧或另一方取出,但不管怎样,我一直在接受EXC_BAD_ACCESS或SIGABRT而我只是不要了解正确的方法。这是我尝试的最后一件事:
for speaker in NSArray(array: slot!.speakers!.allObjects){
if let speaker = speaker as? Speaker {
speaker.mutableSetValueForKey("talks").removeObject(slot!)
}
}
slot!.mutableSetValueForKey("speakers").removeAllObjects()
if let speakersArray = talkSlotDict["speakers"] as? NSArray {
for speakerDict in speakersArray {
if let speakerDict = speakerDict as? NSDictionary {
if let linkDict = speakerDict["link"] as? NSDictionary {
if let href = linkDict["href"] as? String {
if let url = NSURL(string: href) {
if let uuid = url.lastPathComponent {
if let speaker = self.getSpeakerWithUuid(uuid) {
speaker.mutableSetValueForKey("talks").addObject(slot!)
slot!.mutableSetValueForKey("speakers").addObject(speaker)
}
}
}
}
}
}
}
}
如果有帮助,我正在使用的API是documented here,因为我正在尝试将会议日程安排到Apple Watch扩展中的Core Data中。请注意,我设法存储了所有其余的计划,没有任何问题。但是对于这种关系,每当我第一次存储它时尝试更新它,我得到一个EXC_BAD_ACCESS(或者有时是SIGABRT),当然在我的代码中的随机位置。知道我做错了吗?
答案 0 :(得分:0)
好的,在阅读了一些与Core Data EXC_BAD_ACCESS错误和多线程相关的问题之后,我注意到我正在对NSURLSession回调进行缓存。一旦我使用下面的代码在主线程上调用了我的缓存函数,EXC_BAD_ACCESS错误就完全消失了,现在数据似乎得到了正确的保存和更新:
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.cacheSlotsForSchedule(schedule, data: data)
})