iOS设备上缺少DateTime Parse

时间:2017-12-13 21:09:45

标签: c# ios datetime xamarin xamarin.forms

我正在尝试将DatePicker添加到Xamarin Forms项目中。我从Xamarins website提取了一个样本,或者也在下面解释过:

<DatePicker VerticalOptions="CenterAndExpand" Date="{x:Static sys:DateTime.Now}">
    <DatePicker.Format>yyyy-MM-dd</DatePicker.Format>
    <DatePicker.MinimumDate>
        <sys:DateTime x:FactoryMethod="Parse">
            <x:Arguments>
                <x:String>Jan 1 2000</x:String>
            </x:Arguments>
        </sys:DateTime>
    </DatePicker.MinimumDate>
    <DatePicker.MaximumDate>
        <sys:DateTime x:FactoryMethod="Parse">
            <x:Arguments>
                <x:String>Dec 31 2050</x:String>
            </x:Arguments>
        </sys:DateTime>
    </DatePicker.MaximumDate>
</DatePicker>

我也有两个命名空间:

xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"

在iPhone模拟器(版本11.2)上运行时,它很乐意呈现并运行但是如果我在物理设备(版本11.2)上运行它会引发以下异常:

  

System.MissingMemberException

     

找不到System.DateTime :: Parse(System.String)

的静态方法

有没有人遇到过这个问题,或者知道为什么会失败?

1 个答案:

答案 0 :(得分:1)

只是为了澄清@Jason和@SushHangover提到的答案。

Mono链接器执行静态评估,因此未编译未编译的XAML,因为它将在运行时基于序列化/基于反射。没有链接器,应用程序将是巨大的,就iOS应用程序而言,这些应用程序必须链接Xamarin.iOS.dll以删除您未使用的功能,否则应用程序提交将失败,因为整个iOS API被引用而没有全部iOS权利已启用。还解释了here

简而言之,快速解决方法是在代码中引用DateTime.Parse以证明重点。当我有机会时,我会在编译器中实际强制它,因为我不需要在代码中调用DateTime.Parse