【问题标题】:Xamarin iOS Cannot access a disposed object, Object name: ''Xamarin iOS 无法访问已释放的对象,对象名称:''
【发布时间】:2016-08-26 22:31:01
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: c# xamarin.ios xamarin.forms dispose custom-renderer


    【解决方案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;
            }
    

    【讨论】:

      猜你喜欢
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2020-04-23
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多