4

これは、 http ソースからの未回答の Image Caching に続く質問です。

MvvmCross のサンプルのコードを使用したところ、MvxImageViewLoader自分のプロジェクトで実行できました。アプリケーションの現在のインスタンスの画像をキャッシュしますが、再起動するとすべての画像が再度リロードされます。それらを iPhone の Library\Caches フォルダーに永続的に保持したいと思います。

アプリケーション ログに次の行があることに気付きました。

mvx: 警告: 2.25 永続ダウンロード キャッシュは利用できません - テキスト シリアライザーは利用できません

MvxFileDownloadCacheIoC コンテナーにはインターフェース用のクラスが登録されていないため、フレームワークのクラスから取得されIMvxTextSerializerます。したがって、このインターフェイスの実装を定義すると、永続的なキャッシュを使用したソリューションが何らかの形で機能すると思います。シリアル化するオブジェクトと逆シリアル化する文字列で動作するため、インターフェイスの性質上、ディスクへの画像の保存に使用するには疑わしいと思われます。そのため、私は実際に混乱していて、どちらに進むべきかわかりません。

4

2 に答える 2

5

未回答の質問に対する私の回答で回答したように、http から wp、winrt、xamarin.android、および xamarin.touch に画像を表示することは、次の 2 つの N+1 ビデオに示されています。

これらの 2 番目は、プラグイン nuget パッケージを使用して、セッション間でイメージをダウンロードして保持します。

  • MvvmCross.HotTuna.Plugin.DownloadCache
  • MvvmCross.HotTuna.Plugin.File
  • MvvmCross.HotTuna.Plugin.Json

私は実際に混乱していて、どちらに進むべきかわかりません。

明らかに、MvvmCross のダウンロード コードは 1 つの実装にすぎません。また、Mono-httpwebrequest ベースのダウンロードは 100% 信頼できないという証拠がいくつかあります。 MvxDynamicImageHelper unreliableを参照してください。ユーザーは、独自のイメージ ダウンロード プラグインを自由に実装できます。たとえば、iOS のような iOS コードを使用します

于 2013-07-19T06:54:59.853 に答える
2

どうやら、問題は解決するのが本当に簡単だったようです。iOS プロジェクトが MvvmCross ライブラリ セットの Cirrious.MvvmCross.Plugins.Json ライブラリを参照していることを確認する必要があります (Newtonsoft.Json.dll へのリンクを使用してビルドする必要があります)。また、プラグインをアプリケーションに登録することを忘れないでください。基本的に、これは、MvxImageViewLoader のロードされたすべてのイメージのキャッシュと永続化を提供する構成です。

public class Setup : MvxTouchSetup
{
    public Setup (MvxApplicationDelegate appDelegate, IMvxTouchViewPresenter presenter)
        : base(appDelegate, presenter)
    {
    }

    protected override IMvxApplication CreateApp()
    {
        return new YourAppClass();
    }

    protected override void AddPluginsLoaders(MvxLoaderPluginRegistry registry)
    {
        registry.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.DownloadCache.Touch.Plugin>();
        registry.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.File.Touch.Plugin>();

        base.AddPluginsLoaders(registry);

    }

    protected override void InitializeLastChance ()
    {
        Cirrious.MvvmCross.Plugins.DownloadCache.PluginLoader.Instance.EnsureLoaded();
        Cirrious.MvvmCross.Plugins.File.PluginLoader.Instance.EnsureLoaded();
        Cirrious.MvvmCross.Plugins.Json.PluginLoader.Instance.EnsureLoaded();

        base.InitializeLastChance();
    }

}

テキストシリアライザーがないというコンソールログ行に関する私の最初の観察は、問題を解決するための鍵でした。iPhone シミュレーターでアプリの Caches フォルダーを調べたところ、Pictures.MvvmCross フォルダーに大量のキャッシュされた画像が見つかりましたが、MvvmCross フレームワークのソース コードによると、キャッシュ エンジンに提供するエンティティのシリアル化されたリストを含む Pictures.MvvmCross_CacheIndex.txt も必要です。既存の画像ファイルのリストをロードする方法。シリアライザが見つからないため、このリスト ファイルは作成されませんでした。そのため、次のアプリケーションの再起動時に、既存のロードされたイメージに関するすべての情報が失われました。

于 2013-07-26T21:57:59.883 に答える