IMvxPictureChooserTask在Xamarin.iOS上不工作

IMvxPictureChooserTask在Xamarin.iOS上不工作,xamarin.ios,xamarin,mvvmcross,Xamarin.ios,Xamarin,Mvvmcross,Xamarin.iOS上的IMVxPictureChoserTask有问题。当第一次尝试拍照或从库中选择图片时,什么都不会发生。日志中接下来的所有时间都会显示以下消息: 当任务已处于活动状态时调用MvxImagePickerTask 没有别的了 那么,有人能提供帮助或建议吗 更新1 失败的代码: public HomeViewModel(IDataService dataService, IApiService apiService, IMvxPictureChooserTask picture

Xamarin.iOS上的IMVxPictureChoserTask有问题。当第一次尝试拍照或从库中选择图片时,什么都不会发生。日志中接下来的所有时间都会显示以下消息:

当任务已处于活动状态时调用MvxImagePickerTask

没有别的了

那么,有人能提供帮助或建议吗

更新1

失败的代码:

public HomeViewModel(IDataService dataService, IApiService apiService, IMvxPictureChooserTask pictureChooserTask)
{
    _apiService = apiService;
    _dataService = dataService;
    _pictureChooserTask = pictureChooserTask;

    //Another staff here
}

private void DoAddPicture()
{
    _pictureChooserTask.TakePicture(400, 95, OnPicture, () => { });
}
更新2

问题是我正在使用自定义演示器来实现侧菜单功能。它继承自MvxBaseTouchViewPresenter。MvxImagePickerTask在没有此选项的情况下可以正常工作

那么,有人能建议我如何同时使用MvxImagePickerTask和CustomPresenter吗?或者可能是其他建议,我如何在另一个基于MvvmCross的解决方案中同时使用这两种功能


解决方案

只需覆盖自定义演示器中的PresentModalViewController:

public override bool PresentModalViewController(MonoTouch.UIKit.UIViewController viewController, bool animated)
{
    var currentViewController = _flyOutNavigationController.ViewControllers[_flyOutNavigationController.SelectedIndex] as UINavigationController;
    currentViewController.PresentViewController(viewController, true, null);
    return true;
}
public override bool PresentModalViewController(MonoTouch.UIKit.UIViewController viewController, bool animated)
{
    var currentViewController = _flyOutNavigationController.ViewControllers[_flyOutNavigationController.SelectedIndex] as UINavigationController;
    currentViewController.PresentViewController(viewController, true, null);
    return true;
}

解决方案

只需覆盖自定义演示器中的PresentModalViewController:

public override bool PresentModalViewController(MonoTouch.UIKit.UIViewController viewController, bool animated)
{
    var currentViewController = _flyOutNavigationController.ViewControllers[_flyOutNavigationController.SelectedIndex] as UINavigationController;
    currentViewController.PresentViewController(viewController, true, null);
    return true;
}
public override bool PresentModalViewController(MonoTouch.UIKit.UIViewController viewController, bool animated)
{
    var currentViewController = _flyOutNavigationController.ViewControllers[_flyOutNavigationController.SelectedIndex] as UINavigationController;
    currentViewController.PresentViewController(viewController, true, null);
    return true;
}

解决方案

只需覆盖自定义演示器中的PresentModalViewController:

public override bool PresentModalViewController(MonoTouch.UIKit.UIViewController viewController, bool animated)
{
    var currentViewController = _flyOutNavigationController.ViewControllers[_flyOutNavigationController.SelectedIndex] as UINavigationController;
    currentViewController.PresentViewController(viewController, true, null);
    return true;
}
public override bool PresentModalViewController(MonoTouch.UIKit.UIViewController viewController, bool animated)
{
    var currentViewController = _flyOutNavigationController.ViewControllers[_flyOutNavigationController.SelectedIndex] as UINavigationController;
    currentViewController.PresentViewController(viewController, true, null);
    return true;
}

在使用Xamarin.Forms(Cheesebarons/Ninjacoder)解决方案集成MvvmCross和Xamarin.Forms时,我遇到了同样的问题

我能够使用下面的方法使它工作,但是它看起来像是一个黑客。但是,它只解决了第一次使用
拍照时的问题,它在调试输出中注意到:

对尚未渲染的视图进行快照将导致空快照。确保您的视图在快照之前或屏幕更新之后至少呈现一次

即使第一个调用返回图像流,任何后续调用都不会返回,并且在第二个调用
TakePicture
call后将显示

mvx:警告:当任务已处于活动状态时调用了30,97 MvxImagePickerTask

我的解决办法是:

公共虚拟bool PresentModalViewController(UIViewController,bool动画){
_window.RootViewController.PresentViewController(controller,true,null);
}
更新:某种分辨率

在MvvmCross自动在ViewModel
ctor
中实例化
IMVxPictureChoserTask
之前


通过每次使用
Mvx.Resolve()

之前:

专用IMVxPictureChoserTask globalTask;
私有void快照(){
var stream=等待环球旅行拍摄(1200,95);
//只有在第一次尝试时才会来这里
}
公共主视图模型(IMVxPictureChoserTask任务){
globalTask=任务;
}
解决方案:

private void Snapshot(){
var task=Mvx.Resolve();
var stream=等待任务。拍摄照片(1200,95);
//每次都有效
}

我有点担心那里的某个地方有内存泄漏。

我在使用Xamarin.Forms(Cheesebarons/Ninjacoder)解决方案集成MvvmCross和Xamarin.Forms时遇到了同样的问题

我能够使用下面的方法使它工作,但是它看起来像是一个黑客。但是,它只解决了第一次使用
拍照时的问题,它在调试输出中注意到:

对尚未渲染的视图进行快照将导致空快照。确保您的视图在快照之前或屏幕更新之后至少呈现一次

即使第一个调用返回图像流,任何后续调用都不会返回,并且在第二个调用
TakePicture
call后将显示

mvx:警告:当任务已处于活动状态时调用了30,97 MvxImagePickerTask

我的解决办法是:

公共虚拟bool PresentModalViewController(UIViewController,bool动画){
_window.RootViewController.PresentViewController(controller,true,null);
}
更新:某种分辨率

在MvvmCross自动在ViewModel
ctor
中实例化
IMVxPictureChoserTask
之前


通过每次使用
Mvx.Resolve()

之前:

专用IMVxPictureChoserTask globalTask;
私有void快照(){
var stream=等待环球旅行拍摄(1200,95);
//只有在第一次尝试时才会来这里
}
公共主视图模型(IMVxPictureChoserTask任务){
globalTask=任务;
}
解决方案:

private void Snapshot(){
var task=Mvx.Resolve();
var stream=等待任务。拍摄照片(1200,95);
//每次都有效
}

我有点担心那里的某个地方有内存泄漏。

您能编辑您的问题以包含失败的代码吗?您是否尝试过示例或N+1视频,因为它们显示了一些示例用法?是的,我尝试过N+1和教程中的示例。它运行良好,但在我的项目中不起作用(我发现了问题。我正在使用从MvxBaseTouchViewPresenter继承的自定义presenter。因此,我试用了out,它可以工作。斯图尔特,你能建议我如何使用两者吗?因为我根本无法从应用程序中删除自定义presenter,所以我将其用作辅助菜单。你能编辑你的问题以包含失败的代码吗?你尝试过示例或应用程序了吗N+1视频显示了一些示例用法?是的,我尝试了N+1和教程中的示例。效果很好,但在我的项目中没有(我发现了这个问题。我正在使用从MvxBaseTouchViewPresenter继承的自定义presenter。因此我试用了它,它可以工作。斯图尔特,你能建议我如何使用这两个吗?因为我根本无法从应用程序中删除自定义presenter,所以我使用它作为辅助菜单。我通过每次在g
Mvx.Resolve()
(参见上面的编辑)非常棒的解决方案!T