2012-05-02 37 views
3

我们正在使用MVVMCross框架为iOS,Android和WP7开发一个跨平台的应用程序,并且我错过了MvxApplication中的一个方法,我可以重写这个方法,它可以作为平台中立的未处理异常处理程序(由平台调用具体的)。在MVVMCross应用程序中处理异常的建议方式是什么?

所以问题是什么建议的方式来处理异常一般和MVVMCross应用程序中的异步调用? (!崩溃)

感谢, 阿提拉

回答

3

对于真正意外的异常那么这个问题是目前没有答案:看crash reporting in MonoTouch and MonoDroid


然而,建议你将如何异步期间处理异常打电话,然后看看BestSellers示例:MvvmCross BestSellers Sample

BestSellers使用2种技术,我发现我在MvvmCross应用程序中使用了很多:

  • 共享视图模型代码的错误处理
  • 使用一个应用程序级别“错误的路由器”的获得从的ViewModels到UI通知像UIAlertViews,烤面包和/或消息框的错误使用BaseViewModel类。

在更详细的级别,什么畅销书的作用是:

每个视图模型采用直接调用的图书信息web服务。例如,Category List被构造为:

public CategoryListViewModel() 
    { 
     AsyncLoad(); 
    } 

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

其中GeneralAsyncLoad在共享BaseViewModel定义:

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方法使用注入对象 - 一个IErrorReporter

该注射对象初始化为应用建设过程中一个单 - 见ErrorApplicationObjectApp.cs

在他们的建筑和设置,用户界面项目的所有订阅来自同一个单身活动 - 但使用IErrorSource接口代替或IErrorReporter

然后这允许每个平台显示它自己的错误显示 - 例如,:


一个MessageBox显然,如果你需要的错误处理以及错误显示 - 例如如果您想重试异步操作,或者您想要加载数据的脱机副本,那么您可以将其添加到ViewModel和BaseViewModel中的错误处理中。

+0

谢谢,这是我一直在寻找的东西! –

相关问题