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