设置Root时,Xamarin DialogViewController不会被释放

时间:2014-05-31 02:20:27

标签: c# ios xamarin.ios xamarin

我有一个奇怪的问题。我使用DialogViewController的子类进行多页面试。每个页面都显示了许多可以编辑的字段,并在右上角点击保存将下一页推送到NavigationController。它似乎工作正常,但很明显,退出和重复采访泄漏了记忆。我创建了一个简单的测试用例,可以正确清理导航项的按钮事件。在这个例子中,当弹出第二个控制器时调用Dispose,但前提是我没有将Root设置为null以外的其他东西(即如果我注释Root = ...行,这会按预期工作)。这是代码。请告诉我,我错过了一些愚蠢的事情。

public class TestViewController : DialogViewController { int mPage;

public TestViewController (int page) : base (null, true)
{
    mPage = page;

    Root = new RootElement ("Testing") {
        new Section () {
            new StringElement ("Page: " + mPage)
        }
    };
}

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    NavigationItem.RightBarButtonItem = new UIBarButtonItem (UIBarButtonSystemItem.Play);
}

public override void ViewWillAppear (bool animated)
{
    base.ViewWillAppear (animated);

    NavigationItem.RightBarButtonItem.Clicked += OnClicked;
}

public override void ViewDidDisappear (bool animated)
{
    base.ViewDidDisappear (animated);

    NavigationItem.RightBarButtonItem.Clicked -= OnClicked;
}

private void OnClicked(object sender, EventArgs e)
{
    NavigationController.PushViewController(new TestViewController(mPage + 1), true);
}

protected override void Dispose (bool disposing)
{
    base.Dispose (disposing);
}
}

0 个答案:

没有答案