2014-12-11 4 views
1

백그라운드에서이를 수행하기 위해 NSURLSession을 사용하여 WebAPI에 객체를 업로드하려고합니다. 내 웹 API가 작동합니다 - 내 문제는 클라이언트 코드가 CreateUploadTask() 메서드에 도착한 다음 예외가 발생한다는 것입니다. null 예외이며 출력 창에 아무 것도 없습니다. 따라서 문자 그대로 문제가 무엇인지 나타내는 것은 없습니다. 시작하기 위해 사용하는 코드는 여기에 있습니다.NSURLSession xamarin iOS에서 CreateUploadTask 오류

private NSUrlSessionConfiguration configuration = NSUrlSessionConfiguration.BackgroundSessionConfiguration ("com.SimpleBackgroundTransfer.BackgroundSession"); 
    private NSUrlSession session; 


public void SendBackgroundMessage(AppMessage m) 
{ 
    session = NSUrlSession.FromConfiguration(configuration, new UploadDelegate(), new NSOperationQueue()); 

    NSUrl uploadHandleUrl = NSUrl.FromString(Constants.ApiUrl + "api/AppMessage/Send"); 
    NSMutableUrlRequest request = new NSMutableUrlRequest(uploadHandleUrl); 
    request.HttpMethod = "POST"; 
    request["Content-Type"] = "application/json"; 

    var keys = new object[] { "Authorization" }; 
    var objects = new object[] { _accessToken }; 
    var dictionary = NSDictionary.FromObjectsAndKeys(objects, keys); 
    request.Headers = dictionary; 


    string json = JsonConvert.SerializeObject(m); 
    var body = NSData.FromString(json); 
    var uploadTask = session.CreateUploadTask(request, body); 
    uploadTask.Resume(); 
} 

json으로 직렬화하고 NSData 객체를 만드는 방식과 관련이 있다고 생각됩니다. 이것에 대한 어떤 조언도 크게 appriciated 것입니다!

편집 : 좋아, 그래서 내가 업로드 작업이 잘 생성 시체 매개 변수를 제거합니다. 내가 json을 구성하는 방식과 관련이 있습니다.

답변

2

이것은 json 문자열을 디스크에 먼저 저장하여 해결되었습니다. 그런 다음이 작업을 업로드 작업에서 사용하십시오.

 string json = JsonConvert.SerializeObject(m); 

     var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
     var filename = Path.Combine(documents, m.AppMessageId.ToString()); 
     File.WriteAllText(filename, json); 

     var uploadTask = session.CreateUploadTask(request, NSUrl.FromFilename(filename)); 
0

XS 디버거가 모든 예외에서 중지되도록 구성 할 수 있습니다. forums에서 인용구 :

는 "실행 -> 새 중단 점"을 사용하여 메뉴 또는 브레이크 포인트 패드에서 "새 중단 점"버튼 , 그리고 "는 예외 인이 발생하면"휴식 새 중단 점을 설정합니다.

는 대부분의 .NET 예외 같은 그 예외 브레이크 포인트 NullReferenceException를 공격하면, 당신에게이 발생한 행 번호를 포함해야 스택 추적을 포함하여 추가 정보를 제공해야합니다.

+0

미안하지만 완전히 설명하지 않았습니다. 그것의 NullReferenceException .. 그냥 'null'입니다. try catch에서 catch에서 예외 변수가 null 인 경우 : -O입니다. iOS 용으로 xamarin을 사용할 때를 제외하고는 어디에서도 보지 못했습니다. – creatiive

관련 문제