1

私はしばらくの間MvvmCrossv1を使用していますが、それは本当に便利で、それほど難しくはありません。そこで、私は弾丸を噛み、次のプロジェクトにvnextを使用することにしました。プラグインを使おうとするまではすべて順調でしたが、次の出力でクラッシュします-

2013-03-21 18:14:27.121 MyApp[85942:11903] mvx: Diagnostic:   0,00 Setup: Text serialization start
2013-03-21 18:14:27.124 MyApp[85942:11903] mvx: Diagnostic:   0,03 Setup: PlatformServices start
2013-03-21 18:14:27.125 MyApp[85942:11903] mvx: Diagnostic:   0,03 Setup: ViewModelFramework start
2013-03-21 18:14:27.126 MyApp[85942:11903] mvx: Diagnostic:   0,03 Setup: PluginManagerFramework start
2013-03-21 18:14:27.127 MyApp[85942:11903] mvx: Diagnostic:   0,03 Setup: App start

Unhandled Exception:
0   MyApp                      0x00079b12 mono_handle_exception_internal_first_pass + 3058
1   MyApp                      0x0007b1e2 mono_handle_exception_internal + 1602
2   MyApp                      0x0007bd2f mono_handle_exception + 47
3   MyApp                      0x000bce22 mono_x86_throw_exception + 306
4   ???                                 0x07986f8f 0x0 + 127430543
at Cirrious.MvvmCross.Plugins.MvxBasePluginManager.ExceptionWrappedLoadPlugin (System.Type) <IL 0x00002, 0x0001f>
at Cirrious.MvvmCross.Plugins.MvxBasePluginManager.EnsureLoaded<T> () <IL 0x00030, 0x0008c>
at Cirrious.MvvmCross.Plugins.Share.PluginLoader.EnsureLoaded () <IL 0x00008, 0x00029>
at MyApp.Core.BaseApp.InitialisePlugins () [0x00000] in /Users/franklyn/Documents/Programming/MyApp/MyApp.Core/App.cs:42

「Touch」プロジェクト要素を持つプラグインをロードしようとすると、それが発生します。JsonLocalisationプラグインなど、含まれていないプラグインは正常にロードされます。

他の誰かがこれに出くわし、修正を知っているなら、私は彼らから聞いてとてもうれしく思います。

4

1 に答える 1

2

Android の場合、プラグインはそこにあるという理由だけで読み込まれます。プラグインはファイルであり、次の方法で読み込むことができます。Assembly.Load

iOS の場合、Ahead-Of-Time コンパイル要件のため、プラグインをこの方法でロードすることはできません。

これを解決するには、iOS のすべてのプラットフォーム固有のプラグインをセットアップ中に登録する必要があります。

このコードは、すべてのサンプルで確認できAddPluginLoadersますSetup。https://github.com/slodge/MvvmCross/blob/vnext/Sample%20-%20TwitterSearch/TwitterSearch.UI.Touch/Setup.cs を参照してください。

protected override void AddPluginsLoaders(MvxLoaderPluginRegistry registry)
{
    registry.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.Visibility.Touch.Plugin>();
    registry.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.File.Touch.Plugin>();
    registry.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.DownloadCache.Touch.Plugin>();
    base.AddPluginsLoaders(registry);
}

全体として、プラグイン メカニズムは古いコードよりもはるかに優れてv1います。アプリに含まれる不要なコードが減り、拡張可能になるからです。


Assembly.Loadを iOS で使用できない理由に関する最近の議論については、http://forums.xamarin.com/discussion/comment/7882 を参照してください- 私はこの手順を回避しようとしました。

于 2013-03-21T20:12:06.710 に答える