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



在 Xamarin 窗体上,我们正在实现基于 XLabs 自动完成的自定义自动完成控件,在该控件中,我们清空可观察的对象集合,并使用与特定搜索词对应的对象再次填充它。然后它应该使用dataTemplate在listView中完美地呈现结果。

我们开发的内容非常适合Android,但在iOS上会抛出这种类型的错误: Foundation.MonoTouchException:抛出 Objective-C 异常。 名称:NS 内部不一致异常原因:更新无效:第 0 节中的行数无效。 更新后现有节中包含的行数 (1( 必须等于更新 (1( 之前该节中包含的行数,加上或减去从该节插入或删除的行数(插入 1 行,0 已删除(,加上或减去移入或移出该节的行数(0 移入, 0 移出(。

这是我们的代码:

control._availableSuggestions.Clear();
if ( filteredSuggestions.Count > 0 ) {
foreach ( var suggestion in filteredSuggestions ) 
{ 
control._availableSuggestions.Add(filteredSuggestions);
} 

您知道问题的原因吗,有什么解决方法吗?非常感谢您的意见。

如果您使用的是 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);
}

我在Xamarin Forms 2.4版本上遇到了同样的问题。 解决方案是恢复到2.4之前的Xamarin Forms版本,如2.3.4.270,以免出现此错误。

在 iOS 中,当我们使用 ObservableCollection 和 ObservableCollection 的 Clear(( 和 Add(( 函数时,它会抛出 MonoTouchException 异常。解决方法是,

清除((

ObservableCollection 的方法调用。

重新初始化集合,

Result = new ObservableCollection<T>(GetNewList());

最新更新