Xamarin iOS 无法访问已处置的对象,对象名称:''

Xamarin iOS Cannot access a disposed object, Object name: ''

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

System.ObjectDisposedException: Cannot access a disposed object.

Object name: 'CustomNavigationRenderer'.

这是我的 iOS CustomNavigationRenderer class:

[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

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

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

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;
        }