2016-09-30 55 views
0

在我ViewControllers之一,结合我有这样的代码:代码执行在模拟器,但不是在设备

BindingSet.Bind(DateSelectBarItem) 
      .For(v => v.TintColor) 
      .To(vm => vm.HasDatesSelected) 
      .WithConversion(new DateFilterButtonStateToTintColourConverter()); 

DateSelectBarItemUIBarButtonItem

这是转换器的代码:

public class DateFilterButtonStateToTintColourConverter : MvxValueConverter<bool, UIColor> 
{ 
    protected override UIColor Convert(bool value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value ? ColourPalette.Orange : ColourPalette.Blue; 
    } 
} 

现在奇怪的是,当我在模拟器上运行此,我可以看到绑定工作,该HasDateSelected属性进行访问和Convert方法为转换器运行。

但是,然后我部署到设备,它根本不工作。实际上,当我调试设备时,代码甚至没有执行,也没有发现中断点。

+0

可能是一个链接问题。确保你的代码没有通过添加额外的东西链接到LinkerPleaseInclude.cs – Cheesebaron

+0

@ Cheesebaron谢谢你,正是这样,这实际上解决了我遇到的另一个问题。请你可以添加它作为答案,以便我可以接受。 –

回答

2

这是一个链接问题。通常情况下,在调试模式下,模拟器上的某些内容可以正常工作,但不适用于实际设备。这可能是因为链接过程将你的一些代码删除了。

这是因为链接器无法检测到代码通过反射使用时,MvvmCross依赖绑定。

为了提示代码实际使用的链接器,MvvmCross包含一个LinkerPleaseInclude.cs文件,您可以在其中添加其他包含,这些包含使用您期望在其余代码中使用的构造函数,方法和属性。

因此,例如在上述情况下,DateSelectBarItem有一个属性TintColor,您在绑定中使用该属性。在LinkerPleaseInclude.cs文件中添加提示链接器的一个例子是:

public void Include(BarItem item) 
{ 
    item.TintColor = Color.Red; 
} 

这应该是足够的暗示了连接器保持TintColor。你可以用构造函数和方法做类似的事情。

相关问题