0

我正在使用 xamarin 表单项目,我在 xamarin iOS 项目上有一个错误。目前我实现了主从页面的功能,还在操作栏上添加了按钮项。问题是当我从 MainPage 运行应用程序时,我从汉堡菜单移动到另一个页面,然后又回到 MainPage ,一切似乎都很好。但是,当我将 MainPage 轮播滚动到另一个对象并单击 ActionBar 项目时,我收到了这样的错误:

System.ObjectDisposedException:无法访问已处置的对象。

对象名称:'CustomNavigationRenderer'。

这是我的 iOS CustomNavigationRenderer 类:

[assembly: ExportRenderer(typeof(NavigationPage), typeof(CustomNavigationRenderer))]
public class CustomNavigationRenderer : NavigationRenderer
{
    private string pName;
    private int pCCount;
    private string pCName;

    private App MainApp { get; set; }
    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
    }
    private void CIndexChanged(int pCCount, string pName)
    {    
        UIBarButtonItem providerBtn = TopViewController.NavigationItem.RightBarButtonItems[0];
    }

在调试 TopViewController 时,我得到了这样一行:

System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'CustomNavigationRenderer'.

但是直到我从当前对象滚动到另一个轮播视图对象 TopViewController 在调试模式下有这样一行:

Xamarin_Forms_Platform_iOS_NavigationRenderer_ParentingViewController

什么可能是主要原因,该对象没有到达该操作栏项目?

4

1 回答 1

1

我通过不一直创建新的导航页面,而是重用现有的导航页面解决了这个问题。这是我从现有列表中获取项目的导航项目方法。我重用了主页:

private void ListView_ItemSelect(object sender, SelectedItemChangedEventArgs e)
        {
            var selectedItem = (MasterMenuItem)((ListView)sender).SelectedItem;

            MainPage mainPage = (App.Current.MainPage as MainPage);
            switch (selectedItem.KeyIndexName)
            {
                case "MainPage":
                    mainPage.Detail = mainPage.MainPageDetail;
                    break;
                case "AAA":
                    if(aaa==null)
                        aaa = new NavigationPage(new AaaPage());
                    mainPage.Detail = aaa;
                    break;
                case "BBB":
                    if (bbb== null)
                        bbb = new NavigationPage(new BbbPage());
                    mainPage.Detail = bbb;
                    break;
                case "CCC":
                    if (ccc == null)
                        ccc = new NavigationPage(new CccPage());
                    mainPage.Detail = ccc;
                    break;
            };
            mainPage.IsPresented = false;
        }
于 2016-08-26T14:31:01.247 回答