在Xamarin Forms上,我们正在实现一个基于XLabs自动完成的自定义自动完成控件,其中我们清空一个可观察的对象集合,并使用与特定搜索项对应的对象再次填充它。然后它应该使用dataTemplate在listView中完美呈现结果。
我们开发的内容适用于Android,但在此类型的iOS上引发错误: Foundation.MonoTouchException:抛出Objective-C异常。名称:NSInternalInconsistencyException原因:无效更新:第0节中的行数无效。更新(1)后现有节中包含的行数必须等于更新前该节中包含的行数(1),加上或减去从该部分插入或删除的行数(插入1个,删除0个),加上或减去移入或移出该部分的行数(0移入,0移出)。
这是我们的代码:
control._availableSuggestions.Clear();
if ( filteredSuggestions.Count > 0 ) {
foreach ( var suggestion in filteredSuggestions )
{
control._availableSuggestions.Add(filteredSuggestions);
}
你知道问题的原因,任何解决方法吗?非常感谢您的投入。
答案 0 :(得分:1)
我在使用Xamarin Forms 2.4版本时面临同样的问题。* 解决方案是恢复到之前2.4版本的Xamarin Forms,如2.3.4.270,以免出现此错误。
答案 1 :(得分:1)
如果您正在使用Xamarin.Forms 2.4 *,并且不想降级,这里是解决方案。
if (filteredSuggestions.Count > 0)
{
control._availableSuggestions = new ObservableCollection<object>(filteredSuggestions);
control._lstSuggestions.ItemsSource = control._availableSuggestions;
control.ShowHideListbox(true);
}
else
{
control.ShowHideListbox(false);
}
答案 2 :(得分:0)
在iOS中,当我们使用带有ObservableCollection的Clear()和Add()函数的ObservableCollection时,它将引发MonoTouchException异常。解决方法是
之后
清除()
ObservableCollection的方法调用。
重新初始化集合,
Result = new ObservableCollection<T>(GetNewList());