我正在使用xamarin表单项目,我在xamarin iOS项目上有一个错误。目前我实现了Master-Detail Page的功能,并且我还在操作栏上添加了按钮项。问题是,当我从我的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
可能主要原因是,该对象未到达该操作栏项目?
答案 0 :(得分: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;
}