2016-09-30 58 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。你可以用構造函數和方法做類似的事情。

相關問題