Xamarin.Forms Observablecollection создает исключение на устройстве ios - PullRequest
1 голос
/ 03 октября 2019

В модели представления у меня есть наблюдаемая коллекция, которая будет создана в конструкторе. В этом методе я вызываю команду RefreshCommand, которая выполняет следующие шаги:

  • Очищает существующий список (Items.Clear ())
  • Вызывает веб-службу для получения новых элементов (асинхронно)
  • использует foreach для добавления всех новых Itms в список

Эти элементы будут отображаться в ListView, и это прекрасно работает для Android (симулятор и реальное устройство), а также для iOS Simulator, но как только я разверну его на реальном устройстве iOS (в данном случае на iPhone 6), приложение вылетает.

Вот часть исключения:

"Objective-CВозникло исключение. Имя: NSInternalInconsistencyException Причина: недопустимое обновление: недопустимое количество элементов в разделе 0. Количество элементов, содержащихся в существующем разделе после обновления (1), должно быть равно количеству элементов, содержащихся в этом разделе до обновления (1) плюс или минус количество элементов, вставленных или удаленных из этого раздела (1 вставлено, 0 удалено) и плюс или минус количество элементов, перемещенных в или изэтого раздела (0 переехал, 0 переехал). "

Я уже пытался переместить действие очистки и заполнения в GUIThread, и я также попробовал его с потокобезопасной коллекцией: https://codetraveler.io/2019/09/11/using-observablecollection-in-a-multi-threaded-xamarin-forms-application/

, но приложение снова и снова падает. Обходной путь, который работает для меня, состоит в том, чтобы изменить наблюдаемую коллекцию на обычный список ...

Есть идеи, почему это происходит только на реальном устройстве?

1 Ответ

0 голосов
/ 03 октября 2019

У меня были похожие ошибки, что исправило для меня переназначение новой ObservableCollection связанной переменной вместо очистки и добавления их по одному. По сути, я создал список элементов, которые должны быть в observableCollection, а затем назначил их следующим образом:

boundVar = new ObservableCollection(list);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...