monotouch DialogViewController RefreshRequested“System.ArgumentException:您应该在显示控制器之前设置处理程序”

时间:2012-02-20 22:30:15

标签: xamarin.ios monotouch.dialog

我在使用一个实现DialogViewController的ViewControllers中使用RefreshRequested事件时遇到了一些问题:

public CustomViewController () : base (null, true) {
        RefreshRequested += delegate {
        ...
        ReloadComplete ();
        };
    }

我从另一个ViewController调用CustomViewController,如下所示:

var dvc = new CustomViewController();
this.ActivateController(dvc);

我得到的错误消息是“Toplevel异常:System.ArgumentException:您应该在显示控制器之前设置处理程序”

我在这里做的任何指示?感谢

2 个答案:

答案 0 :(得分:3)

看起来您没有指定RootElement,即它由您自己的构造函数设置为null,因此您会收到警告,内部状态尚未准备好设置事件。

你应该用你的构造函数创建一个空的RootElement,然后再向它添加东西(使用属性)。这应该允许您在自己的构造函数中设置事件。 E.g。

public CustomViewController () : base (new RootElement (String.Empty), true)
  

我在这里做的任何指示?

有疑问,你总能在它的github存储库中看到整个source code MonoTouch.Dialog。

答案 1 :(得分:0)

从我的测试中,你可以设置事件处理程序的唯一地方是在ViewController的构造函数中,因为这是唯一可以依赖TableView属性为null的地方。我已经尝试了上面在构造函数中设置RootElement的建议,但是在我可以设置事件处理程序之前似乎总是有一个TableView对象。在构造函数中设置事件处理程序的问题是,我在清理事件处理程序后没有任何重置事件处理程序的方法。