Не удается получить доступ к удаленному объекту.Имя объекта: ‘PrimaryToolbarItem’

#xamarin.forms

Вопрос:

Я создал набор инструментов на странице содержимого, который представляет собой ShellContent из FlyoutItem — я использую ShellApp.

  <ContentPage.ToolbarItems>
  <ToolbarItem
        x:Name="xicon"
        Clicked=""
        IconImageSource="{local1:ImageResource MobileApp.Resources.Images.x.png}"
        Text="Saw X" />
    <ToolbarItem
        x:Name="yicon"
        Clicked=""
        IconImageSource="{local1:ImageResource MobileApp.Resources.Images.y.png}"
        Text="Saw Y" />
    <ToolbarItem
        x:Name="zicon"
        Clicked=""
        IconImageSource="{local1:ImageResource MobileApp.Resources.Images.z.png}"
        Text="Saw Z" />
   </ContentPage.ToolbarItems>
 

В Android это работает хорошо, но в iOS я получил ошибку:

 Message "Cannot access a disposed object.n
Object name: 'PrimaryToolbarItem'." string



$exception  {System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'PrimaryToolbarItem'.
  at Foundation.NSObject.get_SuperHandle () [0x00012] in /Users/builder/azdo/_work/1/s/xamarin-macios/src/Foundation/NSObject2.cs:469 
  at UIKit.UIBarButtonItem.set_Image (UIKit.UIImage value) [0x0002b] in /Users/builder/azdo/_work/1/s/xamarin-macios/src/build/ios/native/UIKit/UIBarButtonItem.g.cs:827 
  at Xamarin.Forms.Platform.iOS.ToolbarItemExtensions PrimaryToolbarItem.UpdateIconAndStyle () [0x00031] in D:a1sXamarin.Forms.Platform.iOSExtensionsToolbarItemExtensions.cs:84 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore <>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1021 
  at Foundation.NSAsyncSynchronizationContextDispatcher.Apply () [0x00000] in /Users/builder/azdo/_work/1/s/xamarin-macios/src/Foundation/NSAction.cs:178 
--- End of stack trace from previous location where exception was thrown ---

  at (wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
  at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Users/builder/azdo/_work/1/s/xamarin-macios/src/UIKit/UIApplication.cs:86 
  at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0000e] in /Users/builder/azdo/_work/1/s/xamarin-macios/src/UIKit/UIApplication.cs:65 
  at Toretto.MobileApp.iOS.Application.Main (System.String[] args) [0x00001] in C:ProjectsTorettoToretto.MobileAppsrcToretto.MobileAppToretto.MobileApp.iOSMain.cs:17 }  System.ObjectDisposedException
 

Если я удаляю эти элементы в конструкторе страницы содержимого, это не приводит к сбою, я пытался использовать только текст, в Android я использую значок и работает…

     public HomePage()
    {
        InitializeComponent();

        if (DeviceInfo.Platform == DevicePlatform.iOS)  
        {
            this.ToolbarItems.Clear();
        }            
    }
 

Это ошибка? В github я видел несколько вопросов о панели инструментов.

Комментарии:

1. «Если я удалю эти элементы в конструкторе» — где код для этого?

2. Я бы попробовал переместить код в OnAppearing

3. Вы хотите сказать, что я должен создать элементы панели инструментов в методе OnAppearing? Я создаю в XAML

4. нет, я неправильно понял ваш первоначальный вопрос.

5. Использовать текст в iOS можно только при создании элементов панели инструментов внутри метода OnAppearing… Я хотел бы иметь значки 🙁 Если я использую значок, он вылетает

Ответ №1:

Да, это как раз тот случай. Это известная проблема, и команда разработчиков xamarin добавила ее в To do in xamarin form v5.0.1 .

Вы можете следить за этим здесь:https://github.com/xamarin/Xamarin.Формы/вопросы/6387.

Мы приносим извинения за причиненные неудобства.И спасибо за вашу поддержку xamarin.

Комментарии:

1. Спасибо, что подтвердили.