Xamarin IOS NSInvalidArgumentException原因:***

时间:2019-03-22 10:16:37

标签: ios xamarin xamarin.forms

这是针对将要介入此异常的所有人的信息:

  

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

IOS Exception

我在Web和我的代码中搜索了很多此错误。 但是所有“ NSInvalidArgumentException原因:”都更具体地表示为***。

此错误仅在我的案例中出现在IOS上。 Android运行良好。我主要在Android上部署以测试事物。因此,在提交服务器之后,我开始了IOS部署,但没有任何反应。

该错误来自启用了分组功能的ListView。 我正在使用通过ListItems给出的DueDate动态创建组。

我的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绑定。

GroupShortNameBinding="{Binding ShortName}"

另一种是返回一个字符串。空的简称。在这种情况下,IOS将在右侧显示一个重叠的空白搜索栏。

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

当您具有良好的错误处理(例如简单的Try Catch ...

)时,也可以防止此异常

过去几天,我学到了很多东西,希望对那些遇到相同问题的人有所帮助:)

1 个答案:

答案 0 :(得分:0)

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

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