2011-05-21 65 views
0

我測試下面的代碼,從WROX書樣本Mapping05(在這裏找到它)MonoTouch的 - MKPinAnnotationView觸下事件問題

UIButton rightCallout = UIButton.FromType (UIButtonType.DetailDisclosure); 
rightCallout.TouchDown += delegate { 
//NSUrl url = new NSUrl ("http://wrox.com/"); 
//if (!UIApplication.SharedApplication.OpenUrl (url)) { 
// System.Console.WriteLine ("Sorry, can't open url"); 
//} 
ShowAlert("iPad", "TouchDown"); 
}; 
pinView.RightCalloutAccessoryView = rightCallout; 

但它失敗:從GDB 調試信息:

/tmp/mono-gdb-commands.n8GR64:1:源代碼中的錯誤: 無法自我調試

======================= ========================================== 執行本機c時得到了一個SIGSEGV頌。這通常表明 在單聲道運行時一個致命的錯誤或應用程序所使用的機庫

之一。

有什麼建議嗎? 我在Monotouch,MonoDevelop和SDK 4.2上運行最新版本

回答

1

MT 4.0在它的GC中看起來更具侵略性。可能發生的情況是,您的右鍵菜單在本地範圍內。當它超出範圍時,GC將清除它,以便在委託事件觸發時不再引用按鈕。

的簡單的辦法解決,這是給你的範圍在類級別按鈕,而不是你的方法裏面。

看到這個:app crashes when handling navbar button event

+0

這是正確的,我感動Map.GetViewForAnnotation委託外右側標註按鈕和它的工作。謝謝 – 2011-05-21 23:50:42

0

我知道這個問題。我認爲這是垃圾收集的一個問題。

因爲如果你在這個類中創建了UIButton列表,並且添加了一個rightCallout按鈕,它的工作沒有問題。