使用Swift更新Core Data中的多对多关系

时间:2015-10-10 22:02:16

标签: ios swift core-data watch-os-2

我有以下核心数据模型:

enter image description here

我正在尝试从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),当然在我的代码中的随机位置。知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

好的,在阅读了一些与Core Data EXC_BAD_ACCESS错误和多线程相关的问题之后,我注意到我正在对NSURLSession回调进行缓存。一旦我使用下面的代码在主线程上调用了我的缓存函数,EXC_BAD_ACCESS错误就完全消失了,现在数据似乎得到了正确的保存和更新:

dispatch_async(dispatch_get_main_queue(), { () -> Void in
   self.cacheSlotsForSchedule(schedule, data: data)
})