#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. Спасибо, что подтвердили.