Исключение Maui MediaPicker Capture Photo Async с нулевой ссылкой на iOSIOS

Программируем под IOS
Ответить
Anonymous
 Исключение Maui MediaPicker Capture Photo Async с нулевой ссылкой на iOS

Сообщение Anonymous »

Иногда при вызове CapturePhotoAsync следующим образом:
FileResult file = await MediaPicker.Default.CapturePhotoAsync();
Я получаю следующее исключение :
EX: System.NullReferenceException: текущий контроллер представления не может быть обнаружен.
в Microsoft.Maui.ApplicationModel.WindowStateManagerExtensions.GetCurrentUIViewController(IWindowStateManager, Boolean)
в Microsoft.Maui.Media.MediaPickerImplementation.PhotoAsync(MediaPickerOptions, Boolean, Boolean)
в MyApp.Mobile.Controls.PhotoFieldControl.ShowPhotoSourceSelectionAsync()
CapturePhotoAsync вызывается из stacklayout Жест касания, который программно добавляется на страницу содержимого Maui.
Я предполагаю, что исключение создается из самой библиотеки Maui Media. Пока это произошло только на iOS, о Android сообщений нет. Любая помощь очень ценится.
public partial class App : Application
{
public App()
{
MainPage = new LoginPage();
}
}
public partial class LoginPage : ContentPage
{
private async void SignInButton_Clicked(object sender, EventArgs e)
{
App.Current.MainPage = new NavigationPage(new MainPagePhone());
}
}

public partial class MainPagePhone : ContentPage
{
protected override void OnAppearing()
{
var detailPage = DataCollectorSubmissionDetailPage.CreatePage(viewModel.Title, dataCollectorSubmissionViewModel);
await Navigation.PushModalAsync(new NavigationPage(detailPage));

}
}

public partial class DataCollectorSubmissionDetailPage : ContentPage
{
public StackLayout FormContent
{
get; private set;
}

public static DataCollectorSubmissionDetailPage CreatePage(string title, DataCollectorSubmissionViewModel viewModel)
{
var sectionControl = new DataCollectorSectionControl();
FormContent.Children.Add(sectionControl);
mainScrollView.Content = FormContent; // This is a scroll view in the xaml
}
}

public class DataCollectorSectionControl : VerticalStackLayout
{
public StackLayout FieldControls { get; private set; }

public DataCollectorSectionControl()
{
BaseFieldControl control = field.CreateControl(_viewModel, _readOnly, _openToolTipPDF);
FieldControls.Children.Add(control);
Children.Add(FieldControls);
}
}

public class PhotoFieldControl : BaseFieldControl
{
public PhotoFieldControl(PhotoField photoField, DataCollectorSubmissionViewModel viewModel, bool readOnly, Action openToolTipPDFAction) : base(photoField, viewModel, readOnly, openToolTipPDFAction)
{
var grid = new Grid();

grid.Add(CreateFieldLabel(_photoField.FieldName, _photoField.IsMandatory), 0, 0);
grid.Add(CreateValueView(FieldValueLabel), 0, 1);

grid.Add(image, 1, 0);
grid.SetRowSpan(image, 2);

var children = new View[] { grid };
ConstructField(children, CreateFieldTapGestureRecogniser(ReadOnly), photoField);
}

public override BaseFieldControl CreateControl(DataCollectorSubmissionViewModel viewModel, bool readOnly, Action openToolTipPDFAction)
{
return new PhotoFieldControl(this, viewModel, readOnly, openToolTipPDFAction);
}

public async Task OnTapped()
{
FileResult file = await MediaPicker.Default.CapturePhotoAsync();
}

public class BaseFieldControl : StackLayout
{

protected virtual void ConstructField(IList children, IList gestureRecognizers, Field field)
{
StackLayout stackLayout = new StackLayout();
foreach (View child in children)
{
stackLayout.Children.Add(child);
}
if (gestureRecognizers != null)
{
foreach (TapGestureRecognizer gestureRecognizer in gestureRecognizers)
{
stackLayout.GestureRecognizers.Add(gestureRecognizer);
}
}
ConstructField(stackLayout, field);
}

protected virtual void ConstructField(StackLayout containerLayout, Field field)
{
AddStackLayoutStyleBinding(containerLayout);
containerLayout.BindingContext = field;
Children.Add(containerLayout);
}
}


Подробнее здесь: https://stackoverflow.com/questions/782 ... ion-on-ios
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»