2016-08-30 6 views
0

HEJ를 반환 종속성 서비스를 사용하여 원시 아이폰 OS 프로젝트에서 일부 데이터를로드 할Xamarin.Forms DependencyService는 항상 null

임.

이전에 저장 한 일부 데이터를 desirialize하려는 단순한 작업이지만 관계없이 수행 할 작업 항상을 반환합니다.

iOS 프로젝트에서 디버거로 값을 확인하면 null이됩니다. 매우 이상한 어쩌면 실종 메신저 뭔가 ...

내 인터페이스 구현 :

DependencyService = Xamarin.Forms.DependencyService.Get<ISaveRead>(); 
var s = await ApplicationModel.DependencyService.LoadApplication(userName); 

시간 내 주셔서 감사 휴대용 프로젝트에

[assembly: Xamarin.Forms.Dependency(typeof(SaveRead))] 
namespace LindeXF.iOS { 
public class SaveRead : ISaveRead { 

     public async Task<ApplicationModel> LoadApplicationModel(string userName) { 
      try { 

       var userPath = CreatePathJson(userName); 

       if (File.Exists(userPath)) { 
        await Task.Run(() => { 
         using (var file = File.OpenText(userPath)) { 
          var serializer = new JsonSerializer(); 
          var m = (ApplicationModel) serializer.Deserialize(file, typeof(ApplicationModel)); 

         } 
        }); 
       } 
      } 
      catch (Exception ex) { 
       throw new Exception(ex, "LoadApplicationModel()"); 
      } 

      return new ApplicationModel {Username = userName}; 
     } 
    } 

.

답변

0

당신은 의존 서비스에서 LoadApplication 메서드를 호출하고 있는지 의심의 여지가 있습니다.

var s = await ApplicationModel.DependencyService.LoadApplication(userName); 

이고, 방법 선언은 LoadApplicationModel이다.

public async Task<ApplicationModel> LoadApplicationModel(string userName) { 
} 

어쩌면 그게 문제입니까?

var data = await DependencyService.Get<ISaveRead>() 
     .LoadApplicationModel(userName); 
+0

감사하지만 내 잘못은 내가 유래에 잘못된 기능을 복사 :

return new ApplicationModel {Username = userName}; 

나는 당신이 (예를 들어)이 같은 m를 반환한다고 생각합니다. 내가 그렇게 부르는 Im : 오른쪽 ive를 100 번 체크 한 것을 모두 호출하는 Im : –

+0

ahhh okay ... 나는 당신이 내부에서 실행중인 기다리고있는 작업의 생각을 ... 당신은 브레이크 포인트를 사용하여 디버깅 중입니까? . 그렇다면 당신은 작업을 완료하는 데 시간 지연을주고있는 가치를 얻고 있습니다 .. –

0

먼저 당신이 파일의 내용을 역 직렬화하고 m에 ApplicationModel 객체를 저장 : 통화 코드 아래에 사용해보십시오. 좋은 대신 m을 반환하는 모든 보이는

using (var file = File.OpenText(userPath)) { 
    var serializer = new JsonSerializer(); 
    var m = (ApplicationModel) serializer.Deserialize(file, typeof(ApplicationModel)); 
} 

, 당신은 새로운 ApplicationModel 객체를 생성하고를 반환합니다. 답변에 대한

using (var file = File.OpenText(userPath)) { 
    var serializer = new JsonSerializer(); 
    var m = (ApplicationModel) serializer.Deserialize(file, typeof(ApplicationModel)); 
    m.Username = userName; 
    return m; 
} 
+0

시간 주셔서 감사합니다. 그러나 나는 이미이 문제를 해결했습니다. –