2017-03-09 4 views
0

Je développe une application rapide qui incluait des données de base et Alamofire. J'ai du mal à résoudre ce problème pendant presque une journée. Ci-dessous, une capture d'écran après le plantage de l'application et qui se produit de manière aléatoire. Je sais que cette information pourrait ne pas assez, s'il vous plaît mentionner si quelqu'un a besoin de plus de détails. Au moins, guide-moi pour suivre ce problème.Exc_bad_access NSManagedObjectContext (_NSInternalAdditions) _disposeObjects

enter image description here

EDIT:

Son plantage surtout après cette méthode fonction reload 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

nous montre le code où l'application se bloque. Vous pouvez mettre un point d'arrêt d'exception. – rv7284

+0

À quoi ressemble votre pile de données principale? utilisez-vous 'NSPersistentContainer'? –

+0

Je n'utilise pas NSPersistentContainer. – happycoder

Répondre

1

recherche donc à votre trace de la pile, il semble que vous utilisez votre contexte géré fil 2.

Un NSManagedObjectContext ne peut pas être utilisé sur plusieurs threads, vous devez avoir un pour chaque thread (file d'attente) que vous voulez l'utiliser. Il est seulement sûr de passer des identifiants d'objet entre les threads.

Pouvez-vous vérifier que les objets dont vous souhaitez disposer dans votre NSOperation ont été récupérés dans la même file d'attente d'opérations que vous essayez de supprimer?

Vous ne voulez transmettre que les ID à l'opération et vous devez les réhydrater à partir de son propre contexte d'objet géré.

EDIT: En regardant de plus près cela semble être une file d'attente interne gérée par CoreData, donc ce n'est peut-être pas ce que vous faites?