这是一个信息,适用于所有将介入此例外的人:
Foundation.MonoTouchException:抛出Objective-C异常。名称:NSInvalidArgumentException原因:*** - [NSPlaceholderString initWithUTF8String:]:NULL cString
我在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。
我正在做的是创建一个没有任何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
时,你也可以防止这个例外...
我过去几天学到了很多东西,我希望它能帮助那些留在同一个问题上的人:)
正如我上面提到的,有多个路径可以摆脱这个异常。我决定删除我的.XAML文件中的GroupShortNameBinding="{Binding ShortName}"
。
优点是IOS应用程序中不会显示ShortNameList。