2013-03-21 55 views
1

我一直在使用MvvmCross v1一段時間了,&我覺得它非常有用&不是太難用!所以我點點滴滴&決定使用vnext進行下一個項目。一切都很好,直到我試圖用一個插件,它具有以下輸出崩潰 -MvvmCross 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 

它發生每當我試圖LO加載具有「觸摸」項目元素的插件,其他如JsonLocalisation插件沒有,加載好。

如果有其他人遇到此問題,請告訴我們,我很樂意聽到他們的消息。

+0

您是否嘗試在調試模式下進入並縮小它到底在哪裏破壞? – Cheesebaron 2013-03-21 19:44:07

回答

2

對於Android,插件加載只是因爲他們在那裏 - 他們的文件,並可以通過Assembly.Load

對於iOS加載,插件無法加載,因爲名列前茅的時間編制要求這樣。

爲了解決這個問題,iOS中的所有特定於平臺的插件都必須在安裝過程中進行註冊。

可以將所有樣品中看到SetupAddPluginLoaders這段代碼 - 看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 - 我試圖避免這一步。

+0

謝謝Stuart - 我現在正在運行。我知道AOT的要求,我只是沒有弄清楚你是如何初始化插件的。我現在還有一個問題需要重新初始化GeoLocationWatcher - 我會把它作爲另一個問題。 – SomaMan 2013-03-22 09:26:54