Dans le modèle de vue, j'ai une observablecollection qui sera créée dans le constructeur. Dans la méthode, j'appelle la RefreshCommand, qui effectue les étapes suivantes :
- Efface la liste existante (Items.Clear())
- Appelle un webservice pour recevoir les nouveaux éléments (async)
- utilise foreach pour ajouter tous les nouveaux Itms à la liste
Ces éléments seront affichés dans un ListView et cela fonctionne très bien pour Android (simulateur et appareil réel) et aussi pour le simulateur iOS, mais dès que je le déploie sur un appareil iOS réel (dans ce cas l'iPhone 6), l'application se plante
Voici une partie de l'exception :
"Exception Objective-C déclenchée. Nom : NSInternalInconsistencyException Motif : Mise à jour non valide : nombre d'éléments non valide dans la section 0. Le nombre d'éléments contenus dans une section existante après la mise à jour (1) doit être égal au nombre d'éléments contenus dans cette section avant la mise à jour (1), plus ou moins le nombre d'éléments insérés ou supprimés de cette section (1 inséré, 0 supprimé) et plus ou moins le nombre d'éléments déplacés dans ou hors de cette section (0 déplacé dans, 0 déplacé hors). "
J'ai déjà essayé de déplacer l'action clear et fill dans le GUIThread et je l'ai aussi essayé avec une collection thread safe : https://codetraveler.io/2019/09/11/using-observablecollection-in-a-multi-threaded-xamarin-forms-application/
mais l'application plante encore et encore... La solution de contournement qui fonctionne pour moi est de changer l'observablecollection en une liste normale...
Une idée de la raison pour laquelle cela ne se produit que sur un appareil réel ?
0 votes
Je pense que la méthode Clear peut causer un problème lorsqu'elle nettoie la collection.
0 votes
Oui, c'est la méthode de l'effacement qui pose problème, mais je dois nettoyer la liste avant d'ajouter de nouveaux éléments.
0 votes
Lorsque vous utilisez la fonction
Clear
efface l'ensemble de la collection tout en notifiant le changement de collection, ce qui provoque le problème ci-dessus. La solution est simplement d'assigner un nouvel objet avec la liste des éléments corrects !0 votes
L'un de ces deux problèmes XF pourrait être lié : numéro 7670 , numéro 7510 .