3

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

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

这是我们的代码:

control._availableSuggestions.Clear();

if ( filteredSuggestions.Count > 0 ) {

foreach ( var suggestion in filteredSuggestions ) 
{ 

       control._availableSuggestions.Add(filteredSuggestions);
} 

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

4

3 回答 3

2

如果您使用的是 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);
}
于 2018-07-04T13:32:35.770 回答
1

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

于 2017-10-25T10:41:29.030 回答
0

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

清除()

ObservableCollection 的方法调用。

重新初始化集合,

Result = new ObservableCollection<T>(GetNewList());
于 2019-12-03T06:42:30.127 回答