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

本文关键字:对象 iOS 访问 Xamarin | 更新日期: 2023-09-27 18:03:59

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

系统。ObjectDisposedException: Cannot access a resolved object.

对象名称:'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

对象没有到达操作栏项的主要原因是什么?

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

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

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