Xamarin:将对象添加到可观察集合的Objective-C异常

时间:2017-08-11 16:57:42

标签: c# autocomplete xamarin.forms observablecollection xlabs

在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);
} 

你知道问题的原因,任何解决方法吗?非常感谢您的投入。

3 个答案:

答案 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());