2012-05-02 2 views
3

우리는 MVVMCross 프레임 워크를 사용하여 iOS, Android 및 WP7 용 교차 플랫폼 응용 프로그램을 개발 중이고 MvxApplication에서 플랫폼에 중립적 인 처리되지 않은 예외 처리기 (플랫폼에 의해 호출 됨) 역할을 할 수있는 메서드가 누락되었습니다. 특정 것들).MVVMCross 응용 프로그램에서 예외를 처리 할 때 제안되는 방법은 무엇입니까?

그래서 일반적으로 MVVMCross 응용 프로그램에서 비동기 호출 중에 예외를 처리하기위한 제안 된 방법은 무엇입니까? (! 충돌)

감사합니다, 아틸라 진정으로 예기치 않은 예외의

답변

3

다음이 문제는 현재 답이있다 : 당신이 비동기 동안 예외를 처리하는 방법에 대한 제안을 위해, 그러나 crash reporting in MonoTouch and MonoDroid


참조 전화를 걸면 BestSeller 예제를 살펴보십시오. MvvmCross BestSellers Sample

BestSellers는 MvvmCross 응용 프로그램에서 상당히 많이 사용했던 두 가지 기술을 사용합니다.

  • UIAlertViews, 토스트 및/또는 메시지 상자와 같은 UI 알림에 ViewModels에서 오류를 얻을 수있는 응용 프로그램 수준 "오류 라우터"의 사용을 오류 처리와 같은 공유 뷰 모델 코드에 대한 BaseViewModel 클래스의 사용. 보다 상세한 수준에서

, 무엇 베스트 셀러가하는 것은 :

각 뷰 모델은 책 정보에 대한 웹 서비스에 직접 전화를 사용합니다.

public CategoryListViewModel() 
    { 
     AsyncLoad(); 
    } 

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

GeneralAsyncLoad가 공유 BaseViewModel 정의된다 : 예를 들어 Category List가 구성된다

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있다. 이 주입 객체는 응용 프로그램의 건설 기간 동안 싱글로 초기화됩니다

- 자신의 건설 및 설치하는 동안 App.cs

ErrorApplicationObject를 참조 UI 프로젝트는 모두 같은 싱글에서 이벤트에 가입 - 대신 또는 IErrorReporterIErrorSource 인터페이스를 사용하여 .

이렇게하면 각 플랫폼에서 자체 오류 디스플레이를 표시 할 수 있습니다 (예 :: 당신이 오류를 필요로하는 경우


내 코드에서 메시지 박스를 보여줍니다 오류 표시뿐만 아니라 처리 - eg 비동기 작업을 다시 시도하거나 오프라인 데이터 복사본을로드하려는 경우 ViewModel 및 BaseViewModel 내에서 오류 처리에이 작업을 추가 할 수 있습니다.

+0

고마워, 내가 찾고 있었던 것이었다! –

관련 문제