Question

Les étapes suivantes entraînent un blocage de NSFetchedResultsController.

  1. J'essaie d'ajouter le premier élément à un objet TableView sauvegardé par NSFetchedResultsController.
  2. Je crée un objet MO temporaire et affiche un volet de vue modale pour ajouter un nouvel objet.
  3. Sur la feuille d'ajout (contrôleur de vue modale), j'appuie sur le bouton Annuler pour ignorer le nouvel élément.
  4. Dans le bouton CancelAction du bouton Annuler, je supprime le nouvel objet temporaire que j'ai créé.
  5. Le code jusqu’ici est exactement similaire au code exemple Apple pour Core Data. Le seul code supplémentaire dont je dispose est un appel à [tableView reloadData] après que la feuille d'ajout est rejetée.
  6. Le crash ne survient que si j'essaie d'ajouter le premier élément, car il est lié à un nombre de sections incorrect dans NSFetchedResultsController.

Ceci provoque un crash donné ci-dessous. Si je supprime l'appel redondant à reloadData, le blocage n'est pas visible. Si j'ajoute un appel reloadData aux exemples de code de recette, le blocage se produit également.

Est-ce un problème connu de NSFetchedResultsController?

2009-09-13 18: 22: 45.600 Recipes [14926: 20b] * Application terminée en raison d'une exception non interceptée 'NSRangeException', raison: '* - - NSCFArray objectAtIndex:]: index ( 0) au-delà des limites (0) '

Était-ce utile?

La solution

Comme vous l'avez découvert vous-même, vous ne devez PAS utiliser [tableView reloadData], car vous utilisez probablement les méthodes de délégation NSFetchedResultsController

– controllerWillChangeContent:
– controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
– controller:didChangeSection:atIndex:forChangeType:
– controllerDidChangeContent:

Ces méthodes sont en réalité chargées de mettre à jour votre vue tableau lorsque vous ajoutez, supprimez ou modifiez des objets. Par conséquent, lorsque vous ajoutez l'appel à [tableView reloadData], deux threads différents accèdent / modifient votre vue tabulaire. Cela provoque le crash que vous rencontrez.

Si vous n'utilisez pas les méthodes de délégation, le blocage est dû à quelque chose d'autre dans votre code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top