2017-03-09 27 views
0

我开发包含核心数据和Alamofire的快速应用程序。我一直在努力解决这个问题近一天。Exc_bad_access NSManagedObjectContext(_NSInternalAdditions)_disposeObjects

下面是应用程序崩溃后的屏幕截图,它随机发生。我知道这些信息可能不够,请提及是否有人需要更多的细节。至少引导我跟踪这个问题。

enter image description here

编辑:

其主要轰然这种方法重载的tableview功能之后。

func reloadTable(){ 
    print("reloadTable called") 
    DispatchQueue.main.async { 
     let appDel:AppDelegate = (UIApplication.shared.delegate as! AppDelegate) 
     let context:NSManagedObjectContext = appDel.managedObjectContext 
     let request = NSFetchRequest < NSFetchRequestResult>(entityName: "Jars") 
     request.returnsObjectsAsFaults = false; 
     let sortDescriptor = NSSortDescriptor(key: "order", ascending: true) 
     let sortDescriptors = [sortDescriptor] 
     request.sortDescriptors = sortDescriptors 
     self.navigationController!.view.backgroundColor = UIColor.white 
     self.jarlist = NSArray() 

     do{ 
      self.jarlist = try context.fetch(request) as NSArray 
      print("Check 11") 
     }catch{ 

     } 
     self.ArrayPopulator("") 
     print("Check 12") 
     self.JarsTable.reloadData() 
     print("Check 13") 
    } 
} 
+0

向我们展示了应用程序崩溃的代码。你可以把异常断点。 – rv7284

+0

你的核心数据堆栈是什么样的?你在使用'NSPersistentContainer'吗? –

+0

我没有使用NSPersistentContainer。 – happycoder

回答

1

所以看你的堆栈跟踪它看起来像您正在使用的线程2.

您管理方面的一个NSManagedObjectContext不能在多个线程中使用,你必须有一个为每个线程(队列),其你想使用它。在线程之间传递对象标识符是安全的。

您是否可以仔细检查您想在您的NSOperation中处理的对象是否在您试图删除它们的相同操作队列上检索?

您只希望将ID传递给操作并让它从它自己的托管对象上下文中重新水化它们。

编辑:仔细一看,这似乎是由CoreData管理的内部队列,所以可能这不是你的行为?