2015-09-21 47 views
1

我正在使用PCL處理現有的Xamarin iOS應用程序,並使用MvvmCross進行IoC和Databinding。建立在MvvmCross 3.1.1Xamarin.IOS MvvmCross App在iOS9的ViewDidLoad方法中拋出NullReference異常

應用程序看起來像一個TabControl應用程序,但它是在MainViewCotnroller按鈕賦予標籤的感覺。視圖在故事板並在MainViewController聲明,

PrepareForSegue(UIStoryboardSegue SEGUE,NSObject的發送方)方法

是重寫,以加載選定「TAB」查看基於所述Segue公司選擇 - 像下面一樣

if (segue.Identifier == "FirstSegue") 
{ 
    var dest = segue.DestinationViewController as FirstView; 
    dest.Request = new MvxViewModelRequest<FirstViewModel>(null, null, new MvxRequestedBy()); 
    foreach (UIView v in src.placeHolderView.Subviews) 
    { 
     v.RemoveFromSuperview(); 
    } 
    dest.View.Frame = new CGRect(0f, 0f, w, h); 
    src.placeHolderView.Add(dest.View); 
} 

該應用程序運行良好的iPhone與iOS 7.1至8.4。

就在9 iOS版發佈我做了一個測試安裝的應用程序在iPhone 6的iOS 9.1測試版和App墜毀,機上裝載。我檢索了設備日誌(如下),並分析說問題出在MvvmCross ViewDidLoad方法的內部。我更新了最新的SDK(XCode 7,Xamarin.IOS 9.0),並遵循Xamarin提供的指示,並使用最新的SDK再次編譯該應用程序,同樣的錯誤。更新了MvvmCross 3.5.1同一問題

的問題是沒有在44號線在the 3.5 MvvMCross Source Code in GitHub

注意空引用的NuGet包參考,並仍在:這段代碼以來就沒有改變3.1至少和3.5.1是在對的NuGet MvvmCross

堆棧跟蹤以下(應用程序名稱,項目名稱改爲出於安全原因)最新:

2015-09-21 11:06:26.991 MyApp[1210:60b] Unhandled managed exception: 
Object reference not set to an instance of an object (System.NullReferenceException) 
    at Cirrious.CrossCore.Mvx.Resolve[IMvxViewModelLoader]() [0x00006] in <filename unknown>:0 
    at Cirrious.MvvmCross.Touch.Views.MvxViewControllerExtensionMethods.LoadViewModel (IMvxTouchView touchView) [0x00057] in <filename unknown>:0 
    at Cirrious.MvvmCross.Views.MvxViewExtensionMethods.OnViewCreate (IMvxView view, System.Func`1 viewModelLoader) [0x00012] in <filename unknown>:0 
    at Cirrious.MvvmCross.Touch.Views.MvxViewControllerExtensionMethods.OnViewCreate (IMvxTouchView touchView) [0x00001] in <filename unknown>:0 
    at Cirrious.MvvmCross.Touch.Views.MvxViewControllerAdapter.HandleViewDidLoadCalled (System.Object sender, System.EventArgs e) [0x00007] in <filename unknown>:0 
    at (wrapper delegate-invoke) <Module>:invoke_void_object_EventArgs (object,System.EventArgs) 
    at Cirrious.CrossCore.Core.MvxDelegateExtensionMethods.Raise (System.EventH 
andler eventHandler, System.Object sender) [0x00004] in <filename unknown>:0 
    at Cirrious.CrossCore.Touch.Views.MvxEventSourceTableViewController.ViewDidLoad() [0x00006] in <filename unknown>:0 
    at MyProject.Touch.MostPurchasedView.ViewDidLoad() [0x00048] in d:\Working\Repo\MyApp\<MyProjectName>\MyProject.Touch\Views\OneOfTheView.cs:31 
    at (wrapper managed-to-native) ObjCRuntime.Messaging:IntPtr_objc_msgSendSuper (intptr,intptr) 
    at UIKit.UIViewController.get_View() [0x00030] in /Users/builder/data/lanes/2077/d230615b/source/maccore/src/build/ios/native/UIKit/UIViewController.g.cs:2632 
    at MyProject.Touch.HomeViewController.PrepareForSegue (UIKit.UIStoryboardSegue segue, Foundation.NSObject sender) [0x0016a] in d:\Working\Repo\MyApp\MyProject.Mobile\MyProject.Touch\HomeViewController.cs:335 
    at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) 
    at 
UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Users/builder/data/lanes/2077/d230615b/source/maccore/src/UIKit/UIApplication.cs:74 
    at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0001c] in /Users/builder/data/lanes/2077/d230615b/source/maccore/src/UIKit/UIApplication.cs:57 
    at MyProject.Touch.Application.Main (System.String[] args) [0x00001] in d:\Working\Repo\MyApp\MyProject.Mobile\MyProject.Touch\Main.cs:16 
2015-09-21 11:06:26.994 MyApp[1210:60b] critical: Stacktrace: 
Native stacktrace: 
..... 

餘噸裏德上面只調用下面的View.cs:

public override void ViewDidLoad() 
    { 
     try 
     { 
      base.ViewDidLoad(); 
     } 
     catch (Exception ex) 
     { 
      // throw a toast msg in the UI    
     } 
    } 

我禁用所有base.ViewDidLoad()所有View.csviewDidLoad中重寫方法採取文件它以一個新的水平和同樣的問題,但在構造函數中MvxSimpleTableViewSource下面

設備日誌:

Object reference not set to an instance of an object (System.NullReferenceException) 
     at Cirrious.CrossCore.Mvx.TryResolve[IMvxTouchSystem] (IMvxTouchSystem& service) [0x00006] in <filename unknown>:0 
     at Cirrious.CrossCore.Touch.Platform.MvxIosMajorVersionChecker.ReadIsIosVersionOrHigher (Int32 target, Boolean defaultValue) [0x00000] in <filename unknown>:0 
     at Cirrious.CrossCore.Touch.Platform.MvxIosMajorVersionChecker..ctor (Int32 major, Boolean defaultValue) [0x00006] in <filename unknown>:0 
     at Cirrious.MvvmCross.Binding.Touch.Views.MvxSimpleTableViewSource..ctor (UIKit.UITableView tableView, System.String nibName, System.String cellIdentifier, Foundation.NSBundle bundle) [0x00000] in <filename unknown>:0 
     at MyProject.Touch.MostPurchasedView.ViewDidLoad() [0x00059] in d:\Working\Repo\MyApp\MyProject.Mobile\MyProject.Touch\Views\OneOfTheView.cs:42 
     at (wrapper managed-to-native) ObjCRuntime.Messaging:IntPtr_objc_msgSendSuper (intptr,intptr) 
     at UIKit.UIViewController.get_View() [0x00030] in /Users/builder/data/lanes/2077/d230615b/source/maccore/src/build/ios/native/UIKit/UIViewController.g.cs:2632 
     at MyProject.Touch.HomeViewController.PrepareForSegue (UIKit.UIStoryboardSegue segue, Foundation.NSObject sender) [0x0016a] in d:\Working\Repo\MyApp\MyProject.Mobile\MyProject.Touch\HomeViewController.cs:343 
     at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) 
     at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Users/builder/data/lanes/2077/d230615b/source/maccore/src/UIKit/UIApplication.cs:74 
     at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0001c] in /Users/builder/data/lanes/2077/d230615b/source/maccore/src/UIKit/UIApplication.cs:57 
     at MyProject.Touch.Application.Main (System.String[] args) [0x00001] in d:\Working\Repo\MyApp\MyProject.Mobile\MyProject.Touch\Main.cs:16 

簡而言之:

只有在iOS版9.1,MvvmCross 3.1.1和3.5.1 MvvmCross已在MvxViewControllerExtensionMethods class which gets called during ViewDidLoad線44 NullReference問題,但與iOS 8.4及以下

我工作得很好剛開熟悉MvvmCross框架,並不能確定它是否與MvvmCross和iOS 9

一個問題,有沒有人碰到這個問題?任何幫助,將不勝感激。

注意:MvvmCross示例在iOS9下正常工作。所以我相信它必須是Tab實現的東西。

回答

0

有一件事是MvvmCross 3.1.1不是爲iOS統一代碼而構建的。這會阻止你提交你的應用。 MvvmCross 4.0目前處於測試階段,但我會推薦使用它,因爲它有很多修復程序。

如果代碼第44行崩潰而試圖解決IMvxViewModelLoader,這可能意味着你缺少一些包,其中IMvxViewModelLoader是。

+0

3.1.1不是統一 - 真。但3.5.1我認爲是iOS統一代碼,仍然無法使用。我相信這個問題可能不在統一版本中。但是,謝謝你的擡頭。我會試着用4.0來更新你。再次感謝您的建議。 - Vinod –

+0

嘗試使用_MvvmCross 4.0 Beta_並且具有相同的問題。非常傾向於使用MvvmCross將其重寫爲適當的TabControl。請等待並觀察這個問題是否有積極的迴應。謝謝 –

+0

您能否在我們可以重現此問題的小樣本中添加問題並將其添加到主庫中? – Martijn00