3

Iamは、次の2つの方法を使用して、ユーザーのimagefolderで画像を選択します。ただし、私の問題は、ChoosePhotoForEventItem()が呼び出されるたびに、サービスが提供されたアクション(UploadImage)を記憶しているように見えることです。これは、2回目にChoosePhotoForEventItem()が呼び出されると、UploadImageメソッドが2回トリガーされ、3回目に3回トリガーされることを意味します。メソッドをプロパティに変換してnullに設定しようとしましたが、それによって変更されることはありません。

       public void ChoosePhotoForEventItem()
    {
        var picChooser = this.GetService<IMvxPictureChooserTask>();

        picChooser.ChoosePictureFromLibrary(MaxPixelDimension, DefaultJpegQuality,this.UploadImage,delegate {/*Do nothing on cancel*/});

    }

    private void UploadImage(Stream stream)
    {
        this.UploadImage(stream, ItemID);
    }

どんな助けでも大歓迎です

4

2 に答える 2

2

プラグインを見ると、タスクは GetService への呼び出しごとに新しいインスタンスに登録されています

        this.RegisterServiceType<IMvxPictureChooserTask, MvxImagePickerTask>();

https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Plugins/PictureChooser/Cirrious.MvvmCross.Plugins.PictureChooser.Touch/Plugin.cs

また、各 MvxImagePickerTask インスタンスがhttps://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Plugins/PictureChooser/Cirrious.MvvmCross.Plugins.PictureChooser.Touch/MvxImagePickerTask.csに独自の UIImagePickerController を作成するように見えます

var picChooser = this.GetService<IMvxPictureChooserTask>();したがって、特にコードが毎回呼び出されているため、プラグインに問題があることを見つけることはできません。


これをデバッグするために実行できる簡単なサンプル アプリはありますか?

そうでない場合は、次のようなものを実行してみてください。

private int _counter = 0;

public void ChoosePhotoForEventItem()
{
     _counter++;
     var localCounter =  _counter;
    var picChooser = this.GetService<IMvxPictureChooserTask>();

    picChooser.ChoosePictureFromLibrary(MaxPixelDimension, 
         DefaultJpegQuality,
         (stream) => this.SpecialUploadImage(stream, localCounter),
          delegate {/*Do nothing on cancel*/});
}

private void SpecialUploadImage(Stream stream, int theCounter)
{
    MvxTrace.Trace("Callback for localCounter {0}", theCounter);
    this.UploadImage(stream, ItemID);
}

そこからのトレースは、どのアクションが 3 回呼び出されているかを理解するのに役立ちます

于 2013-03-04T16:35:40.423 に答える
2

問題は、Stuart が指摘するように、私が使用しているサービスがシングルトンであり、サービスを使用するたびにインスタンス化されないことです。したがって、今のところ、不要なアップロードを避けるために、単純なブール値を使用して簡単に修正しています。Stuart は、私が使用している mvvm のバージョンがかなり古いことを知らせてくれました。したがって、近い将来に vNext に切り替えることが唯一の方法だと思われます。

于 2013-03-05T19:06:38.017 に答える