代表如下:
public class DoneAlertViewDelegate : UIAlertViewDelegate
{
UINavigationController controller;
EKEventStore store;
EKEvent ekEvent;
public DoneAlertViewDelegate(UINavigationController controller, EKEventStore storeEvent, EKEvent userEvent)
{
this.controller = controller;
store = storeEvent;
ekEvent = userEvent;
}
public override void Clicked (UIAlertView alertview, int buttonIndex)
{
if(buttonIndex == 0)
{
var alert = new UIAlertView("Date Stored", "Date saved in calendar",null,"OK",null);
alert.Show();
SaveEvent();
controller.PopViewControllerAnimated(true);
}
else if(buttonIndex == 1)
{
controller.PopToRootViewController(true);
}
}
public override void Canceled (UIAlertView alertView)
{
}
public void SaveEvent()
{
var err = new NSError();
store.SaveEvent(ekEvent,EKSpan.ThisEvent,out err);
}
}
这里的问题是,当我调试时,这总是会调用调试器(SIGSEGV)错误。但是,当我只是运行程序时,它按计划执行。这是monotouch的一个已知问题(我得到了一个Objective-C异常)或者我只是缺少一些关键代码来使这个工作?提前致谢!
编辑:应用程序输出 -
抛出了Monotouch.Foundation.MonoTouchException“抛出了Objective-C异常。名称:NSInvalidArgumentException原因: - [UITouchData alertView:clickedButtonAtIndex:]:无法识别的选择器发送到实例0xdc614e0
答案 0 :(得分:4)
UIAlertView可能正在收集。尝试将其变为类变量。
答案 1 :(得分:0)
我遇到了同样的问题。事实证明,AlertView DELEGATE不知何故超出了范围。我将它添加到我的AppDelegate中的临时变量(仅作为临时hack)并且它有效。我想像Mike建议的那样将它设置为类变量(但设置Delegate,而不是UIAlertView)应该修复它。