2012-05-02 10 views
3

MVVMCrossフレームワークを使用してiOS、Android、WP7用のクロスプラットフォームアプリケーションを開発しています.MvxApplicationのメソッドは、プラットフォームで中断されていない例外ハンドラ(プラットフォームによって呼び出される特定のもの)。MVVMCrossアプリケーションで例外を処理するための推奨される方法は何ですか?

MVVMCrossアプリケーションで一般的に、また非同期呼び出し中に例外を処理する方法は何ですか?

本当に予期しない例外のおかげで、 アッティラ

答えて

3

その後、この質問は、現在未回答である(クラッシュ!):あなたは、非同期時に例外を処理する方法を上の提案のために、しかしcrash reporting in MonoTouch and MonoDroid


を見ますBestSellerの例を見てみましょう。MvvmCross BestSellers Sample

BestSellersは、私がMvvmCrossアプリケーションでかなり使用した2つの手法を使用しています。

  • UIAlertViews、トーストおよび/またはメッセージボックスのようなUIの通知へのviewmodelsからのエラーを取得するためのアプリレベル「のエラールーター」の使用をエラー処理などの共有のViewModelコードのBaseViewModelクラスの使用。より詳細なレベルでは

、何ベストセラーんです:

各ViewModelには、書籍情報のためのWebサービスへの直接呼び出しを使用しています。

GeneralAsyncLoadが共有 BaseViewModelで定義され
public CategoryListViewModel() 
    { 
     AsyncLoad(); 
    } 

    private void AsyncLoad() 
    { 
     GeneralAsyncLoad(URL_CATEGORIES, ProcessResult); 
    } 

:例えばCategory Listは次のように構成されている - IErrorReporter

protected void GeneralAsyncLoad(string url, Action<Stream> responseStreamHandler) 
    { 
     try 
     { 
      IsLoading = true; 
      var request = WebRequest.Create(url); 
      request.BeginGetResponse((result) => GeneralProcessResponse(request, result, responseStreamHandler), null); 
     } 
     catch (ThreadAbortException) 
     { 
      throw; 
     } 
     // obviously we could do better than catching all `Exception` here! 
     catch (Exception exception) 
     { 
      IsLoading = false; 
      ReportError("Sorry - problem seen " + exception.Message); 
     } 
    } 

上記例外ハンドラ内ReportErrorメソッドは、注入オブジェクトを使用します。

この注入されたオブジェクトは、アプリケーションの構築時にシングルトンとして初期化される - その構造とセットアップ時にErrorApplicationObjectApp.cs

を参照して、UIプロジェクトがすべて同じシングルトンからイベントをサブスクライブ - 代わりIErrorSourceインタフェースを使用して、またはIErrorReporter

これにより、各プラットフォームで独自のエラー表示が可能になります。:エラーが必要な場合


内のコードからのメッセージボックスを表示しますエラーを表示するだけでなく処理する非同期操作を再試行する場合や、データのオフラインコピーをロードする場合は、ViewModelおよびBaseViewModel内のエラー処理にこれを追加できます。

+0

ありがとう、それは私が探していたものです! –

関連する問題