Core Data Fetch上的EXC_BAD_ACCESS(代码= 1,地址= 0x10)

Uno*_*ome 5 exc-bad-access core-data ios swift

我得到一个间歇性的错误,证明很难调试.

我从以下方法得到以下错误

Core Data Fetch上的EXC_BAD_ACCESS(代码= 1,地址= 0x10)

class func getAll(context: NSManagedObjectContext) -> [Tag] {
    var returnValue: [Tag] = []
    do {
        let fetchRequest = NSFetchRequest(entityName: Tag.entityName())
        returnValue = try context.executeFetchRequest(fetchRequest) as! [Tag]
    } catch {
    }
    return returnValue
}
Run Code Online (Sandbox Code Playgroud)

这个错误是间歇性的,并且只发生在每几百个会话中,但是出现频繁,我需要处理它.代码中断了returnvalue = try context.execute...

  • 从调试来看,我fetchRequest的不是nil
  • context的不是nil
  • returnValue的默认值为空数组
  • 我的backgroundContext在后台线程上运行

我已经打开了NSZombieFlag来试图查看某个内存是否在某个地方被释放然后被访问,但是我对这导致了什么感到难过.任何想法或见解将不胜感激.

小智 7

我在 Core Data 中看到的几乎所有EXC_BAD_ACCESS问题都是由尝试使用线程并发而不是较新的队列并发模型引起的。

从 iOS 5 开始,您需要使用performBlockperformBlockAndWait访问托管对象上下文。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Concurrency.html