2017-03-09 1 views
0

코어 데이터와 Alamofire가 포함 된 신속한 응용 프로그램을 개발하고 있습니다. 나는 거의 하루 동안이 문제를 해결하기 위해 애 쓰고있다.Exc_bad_access NSManagedObjectContext (_NSInternalAdditions) _disposeObjects

아래는 앱이 다운 된 후 무작위로 발생하는 스크린 샷입니다. 이 정보가 충분하지 않을 수도 있음을 알고 있습니다. 자세한 내용이 필요한 사람은 누구나 언급하십시오. 적어도이 문제를 추적하도록 안내하십시오.

enter image description here

EDIT :

그 방법이 주로 리로드의 tableview 함수 후 충돌. 당신이 NSManagedObjectContext 여러 스레드에 사용할 수 없습니다, 당신은 모든 스레드에 대한 한 (큐)가 있어야합니다 스레드 2

에 관리 컨텍스트를 사용하는 것처럼

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

은 앱이 충돌하는 코드를 보여줍니다. Exception Breakpoint를 넣을 수 있습니다. – rv7284

+0

핵심 데이터 스택은 어떻게 생겼습니까? 'NSPersistentContainer'를 사용하고 있습니까? –

+0

NSPersistentContainer를 사용하고 있지 않습니다. – happycoder

답변

1

그래서 당신의 스택을 찾고 보이는 추적하는 당신은 그것을 사용하고 싶습니다. 스레드간에 객체 식별자를 전달하는 것만 안전합니다.

NSOperation에서 처분하려는 개체가 제거하려는 동일한 작업 큐에서 검색되었는지 다시 확인할 수 있습니까?

id를 조작에 전달하고 자체 관리 오브젝트 컨텍스트에서 재수화할 수 있습니다.

편집 : 더 자세히 보면 이것이 CoreData에서 관리하는 내부 대기열 인 것처럼 보입니다.

관련 문제