为什么我的自定义UIAlertViewDelegate会使调试器崩溃?

时间:2011-08-04 16:15:14

标签: iphone debugging xamarin.ios monodevelop uialertview

代表如下:

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

2 个答案:

答案 0 :(得分:4)

UIAlertView可能正在收集。尝试将其变为类变量。

答案 1 :(得分:0)

我遇到了同样的问题。事实证明,AlertView DELEGATE不知何故超出了范围。我将它添加到我的AppDelegate中的临时变量(仅作为临时hack)并且它有效。我想像Mike建议的那样将它设置为类变量(但设置Delegate,而不是UIAlertView)应该修复它。