Monotouch - MKPinAnnotationView TouchDown事件问题

时间:2011-05-21 18:13:38

标签: iphone xamarin.ios

我正在测试下面的代码,来自WROX书籍示例Mapping05(在此处找到)

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:源命令文件中出错: 无法调试自己

=============================================== ================== 执行本机代码时获得SIGSEGV。这通常表明 单声道运行时或其中一个本机库中的致命错误

由您的应用程序使用。

有什么建议吗? 我在Monotouch,MonoDevelop和SDK 4.2上运行最新版本

2 个答案:

答案 0 :(得分:1)

MT 4.0在它的GC中看起来更具侵略性。可能发生的是你的rightCallout是本地范围的。当它超出范围时,GC会清除它,这样当委托事件触发时,不再有对该按钮的引用。

对此的简单修复是将您的按钮放在类级别,而不是在方法内。

请参阅:app crashes when handling navbar button event

答案 1 :(得分:0)

我知道那个问题。我认为垃圾收集存在问题。

因为如果你在这个类中创建了UIButton列表并且向它添加了rightCallout Button,那么它可以毫无问题地工作。