我在運行時收到異常,如下所示。Xamarin Realm no realmobject有鏈接器剝去它們
「不realmobject。已連接剝奪他們......」
我的解決方案包括一個與Visual Studio的Mac PCL,Android和IOS項目,並安裝在每個項目的境界包1.6.0。我也檢查過Fodyweaver.xml包含了正確的引用,並且所有的包都有相同的版本。
當我將PCL包含在與解決方案相同的文件夾中時(即像使用PCL的默認多平臺解決方案),一切正常。
但是我將包含所有領域邏輯的PCL項目移到了一個單獨的文件夾,因此我可以在多個解決方案中使用它。我的解決方案現在包含來自此外部文件夾的PCL,iOS和Android項目也引用了領域包。該應用程序編譯正常,但是當我運行應用程序時,它現在在第一次調用realm.getinstance時收到此異常。
如果將PCL項目重新放入與最初創建的主解決方案相同的文件夾中,它可以正常工作。
任何人都可以提供一個解決這個問題?
澄清爲什麼這會起作用 - 編織器會在PCL/NetStandard庫的模塊初始化器中注入註冊碼,讓Realm知道它的模型。如果在加載庫之前使用了Realm,則問題會自動顯示 - 未運行cctor,因此庫中的模型尚未註冊。通過建議的代碼更改,確保在獲取實例之前訪問該庫,以便它能夠正常工作。或者,您可以在庫中添加一個虛擬的'Init()'方法,並在應用程序啓動時調用它以急切地加載它並調用cctor。 –
@NikolaIrinchev感謝您的額外信息,我應該添加一些關於做假設初始值設定項的內容。我的存儲庫設置總是從我的Realm模型中獲取GetInstance,所以沒有人需要記住「預初始化」它,這也避免了獲取Fody/RealmWeaver編譯器的警告,因爲在其他程序集中沒有編織任何東西。 – SushiHangover
我也在使用VIPER :)。是有道理的 - 但我已經嘗試過了,它不適用於我的解決方案。我有一個名爲DataService的類,我在其上添加了靜態Getinstance()方法。 Dataservice使用ninject庫進行依賴注入初始化 - 所以當dataservice實例被ninject初始化時,構造函數被調用,這就是我稱之爲靜態Getinstance的地方 - 但他仍然會發生異常。我嘗試在Datservice上使用虛擬intialiser,但它仍然失敗 –