IOS NSInvalidArgumentException原因:***

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

这是一个信息,适用于所有将介入此例外的人:

Foundation.MonoTouchException:抛出Objective-C异常。名称:NSInvalidArgumentException原因:*** - [NSPlaceholderString initWithUTF8String:]:NULL cString

IOS Exception

我在Web和我的代码中搜索了很多这个错误。但是所有“NSInvalidArgumentException Reason:”都更具体为***。

此错误仅出现在我的案例中的IOS上。 Android运行良好。我主要是在Android上进行部署测试。因此,经过几次提交,我开始进行IOS部署,不再有任何工作了。

错误来自具有启用分组的ListView。我正在通过ListItems给出的截止日期动态创建组。

我的ListView配置如下:

<ListView x:Name="AuditList"
         ItemSelected="AuditList_ItemSelected"
         HasUnevenRows="True"
         IsGroupingEnabled="true" 
         GroupDisplayBinding="{Binding LongName}"
         GroupShortNameBinding="{Binding ShortName}"
         SeparatorVisibility="None">

众所周知,LongName的绑定是标题。 ShortName仅适用于IOS,负责右侧的Searchlist

Xamarin ListView Grouping Doc

我正在做的是创建一个没有任何ShortName的GroupItem ...

private GroupedAuditViewItem GetGroup(DateTime date)
    {
        if (date == null)
            return null;
        string longName = CreateGroupName(date);

        return new GroupedAuditViewItem() { LongName = longName };
    }

在这种情况下,您将获得此异常。但是如何防止这种情况呢?

你有多个路径。最简单的方法是删除ShortName Binding。

GroupShortNameBinding="{Binding ShortName}"

另一个是返回一个string.Empty ShortName。在这种情况下,IOS将在右侧显示重叠的空搜索栏。

return new GroupedAuditViewItem() { LongName = longName, ShortName = shortName };

当你有一个很好的错误处理例如一个简单的Try Catch时,你也可以防止这个例外...

我过去几天学到了很多东西,我希望它能帮助那些留在同一个问题上的人:)

ios xamarin xamarin.forms
1个回答
0
投票

正如我上面提到的,有多个路径可以摆脱这个异常。我决定删除我的.XAML文件中的GroupShortNameBinding="{Binding ShortName}"

优点是IOS应用程序中不会显示ShortNameList。

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