その後、この質問は、現在未回答である(クラッシュ!):あなたは、非同期時に例外を処理する方法を上の提案のために、しかし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メソッドは、注入オブジェクトを使用します。
この注入されたオブジェクトは、アプリケーションの構築時にシングルトンとして初期化される - その構造とセットアップ時にErrorApplicationObject
App.csで
を参照して、UIプロジェクトがすべて同じシングルトンからイベントをサブスクライブ - 代わりIErrorSource
インタフェースを使用して、またはIErrorReporter
。
これにより、各プラットフォームで独自のエラー表示が可能になります。:エラーが必要な場合
内のコードからのメッセージボックスを表示しますエラーを表示するだけでなく処理する非同期操作を再試行する場合や、データのオフラインコピーをロードする場合は、ViewModelおよびBaseViewModel内のエラー処理にこれを追加できます。
ありがとう、それは私が探していたものです! –