Maui 应用程序在导航到某些页面后抛出 UITableView 错误

问题描述 投票:0回答:1

我目前正在开发适用于 Android 和 iOS 的 MAUI 应用程序。将应用程序部署到 iOS 设备时 - 无论它是模拟器还是真实设备 - 我的应用程序中有一些内容页面,在导航到它们时会抛出以下错误:

enter image description here

谷歌搜索这个问题让我相信当您尝试异步填充或更新尚未绘制的视图时会发生错误。老实说,我确实尝试在页面的

Appearing
事件中加载数据,但我已经修复了这个问题。请看下面的示例。 这是一个名为
StocktakingView
的页面及其视图模型的示例,该页面将抛出错误:

<ContentPage xmlns=...>
<ContentPage.Behaviors>
    <toolkit:EventToCommandBehavior EventName="Appearing" Command="{Binding AppearingCommand}" />
    <toolkit:EventToCommandBehavior EventName="NavigatedFrom" Command="{Binding NavigatedFromCommand}" />
</ContentPage.Behaviors>
<ContentPage.ToolbarItems>
    <ToolbarItem Command="{Binding CreateCommand}" IconImageSource="{FontImageSource FontFamily=MaterialSharp, Glyph={x:Static m:MaterialSharp.Add}, Color={AppThemeBinding Dark=White, Light=Black}}" />
</ContentPage.ToolbarItems>
    <CollectionView ItemsSource="{Binding Stocktakings}">
        <CollectionView.ItemTemplate>
            <DataTemplate x:DataType="model:Stocktaking">
                <Grid ColumnDefinitions="*,*" Padding="10">
                    <Grid.GestureRecognizers>
                        <TapGestureRecognizer Command="{Binding Source={RelativeSource AncestorType={x:Type vm:StocktakingViewModel}}, Path=TapCommand}" CommandParameter="{Binding .}" />
                    </Grid.GestureRecognizers>
                    <Label Grid.Column="0" Text="{Binding Name}" FontAttributes="Bold" />
                    <Label Grid.Column="1" Text="{Binding Status}" />
                </Grid>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</ContentPage>

这是视图模型:

[QueryProperty("Stocktakings_list", "stocktakings")]
public partial class StocktakingViewModel : BaseViewModel
{
    private readonly IUserDialogs _userDialogs;
    private readonly IGenericService<Stocktaking, StocktakingCreationInfo> _stocktakingService;

    [ObservableProperty]
    List<Stocktaking> stocktakings_list;

    [ObservableProperty]
    ObservableCollection<Stocktaking> stocktakings;

    public StocktakingViewModel(IUserDialogs userDialogs, IGenericService<Stocktaking, StocktakingCreationInfo> stocktakingService)
    {
        _userDialogs = userDialogs;
        _stocktakingService = stocktakingService;
    }

    [RelayCommand]
    private void OnAppearing()
    {
        Stocktakings = new ObservableCollection<Stocktaking>(Stocktakings_list);
    }
...

Stocktakings
是点击上一页中的图像时通过 HTTP 请求加载的对象列表。这发生在导航到 Stocktaking 页面之前
。然后该列表作为 
StocktakingView
 的参数传递。

private async Task NavigateToStocktaking() { List<Stocktaking> stocktakings = await _stocktakingService.GetAll(); Dictionary<string, object> param = new Dictionary<string, object> { { "stocktakings", stocktakings } }; await Shell.Current.GoToAsync(nameof(StocktakingView), param); }
我的应用程序中的其他页面也有集合视图,并且不会引发任何错误。在导航到页面之前,这些视图也会填充数据。这些页面和有问题的页面基本上没有区别,但它们不会抛出任何错误。

我已经尝试过的:

    将集合视图放入网格中
  • 将集合视图更改为列表视图
  • 彻底摆脱集合视图,这样就没有什么可画的了
  • 彻底摆脱OnAppearing事件
我目前正在 Windows PC 上使用 Visual Studio 17.9.2 进行开发。我已连接到安装了 XCode 15.2 的 Mac。我也在使用社区 MVVM 工具包。

ios xamarin maui
1个回答
0
投票
发现问题了。它与填充视图无关,而是与服务有关。如果

IsSuccessStatusCode

 为 false,我的服务会引发异常,这会导致您在屏幕截图中看到的异常。异常的措辞让我相信它与填充或绘制集合视图有关,并且使我没有注意到服务异常。由于我在调试 iOS 时无法设置任何断点,因此我从未有机会实际测试该服务,我只是假设它有效。
然而,这个问题与 MAUI 的 bug 无关。

© www.soinside.com 2019 - 2024. All rights reserved.