2011-04-08 102 views
3

當我的應用程序,我有一個導航欄按鈕,允許用戶彈出回導航堆棧的頂部。這已經有一段時間了,一直工作得很好。但是,當我使用MT 4.0構建時,它會崩潰。應用程序崩潰處理導航欄按鈕事件

# in constructor 
UIButton btn = UIButton.FromType(UIButtonType.Custom); 
btn.Frame = new RectangleF(0,0,29,29); 
btn.SetBackgroundImage(UIImage.FromFile("images/Home_button.png"),UIControlState.Normal); 
btn.TouchDown += delegate { 
    this.NavigationController.PopToRootViewController(true); 
}; 
UIBarButtonItem bar = new UIBarButtonItem(btn); 
this.NavigationItem.RightBarButtonItem = bar;   

該按鈕被正確地繪製,但是當按下按鈕時,應用程序崩潰。如果我改變委託來做一個Console.WriteLine()它仍然崩潰。

據我所知,這是工作,直到我安裝MT 4.0。

的異常就說明它崩潰時是

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object at (wrapper managed-to-native) 
MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) at 
MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in 
/Users/plasma/Source/iphone/monotouch/UIKit/UIApplication.cs:26 at 
Application.Main (System.String[] args) [0x00000] in 
/Users/jason/Projects/myproj/myproj/AppDelegate.cs:44 

使用後退按鈕是否正常瀏覽。這是一個錯誤,還是我做錯了什麼?

回答

2

快速的問題,但我問這個,因爲我這樣做是爲了自己好幾次,引用您的視圖,它不是在本地你的主要的方法偶然範圍的,是嗎?會發生什麼是引用丟失,但屏幕仍然出現,但只要你想做的事情,它已被垃圾收集。

後退按鈕由導航控制器本身,這將是由你的窗口可能引用擁有,因此它可以真正通過你了。

+1

啊哈!我的UIButton和UIBarButtonItem在本地範圍內。我讓他們成爲班級,而這似乎解決了問題!感謝您指點我正確的方向。 – Jason 2011-04-09 20:36:46

0

就像一個快速的提醒,我也有類似撞車時沒有按鈕被一個局部變量,但包含該按鈕的視圖中創建。我已經描述瞭解決方案here