2017-05-19 7 views
0

가 나는 다음과 같은 필수 매개 변수HTTP POST 요청이 객체 [0]에서 객체를 삽입하지 못했습니다. 문자열, 금액 :

설명을 보낼 필요가 서버에 HTTP 요청을 보내려고 플로트, occurred_at : 문자열, 위치 : 문자열

을 양으로 I 텍스트 필드 (다른 필드는 API를 통해 전달됨)를 통과해야합니다. Segue는 PreObject 객체를 양이 필요한 뷰에 전달합니다.

마법 레코드 PreObject

개체

위해 사용

((엔티티 : PreObject; ID : 0xd000000000040006 ; 데이터 { 량 = 닐; creatingOnBackend = 1; 통화 = nill; description = ""; 비용 = nil; extraInformation = "0xd000000001400010"; 식별자 = 47; ignoredAt = nil; 위치 = nil; occuredAt = "2017-03-12 00:00:00 +0000"; 참가자 = ""; payer = nil; receiver = nil; status = nil; tags = ""; }))

HTTP 요청 요청 : 요청의 매개 변수를 전달

class func sendToBackend(object: PreObject,preObjectID: NSNumber, withCompletion completion: (error: NSError?) ->()) { 

     let url = "\(ServicesUtils.baseUrl())/objects/\(preObjectID)/send" 
     let params = [object.dictionaryBackend()] 
     let sessionManager = ServicesUtils.rexpenseBaseSessionManager() 
     let request = sessionManager.requestSerializer.requestWithMethod("POST", URLString: url, parameters: params, error: nil) 


     let task = sessionManager.dataTaskWithRequest(request) { urlResponse, responseObject, error in 
      if let _ = error { 
       let returnError = ServicesUtils.rexpenseHandleErrorWithResponse(urlResponse, andRequest: request, andResult: responseObject) 
       completion(error: returnError) 
       return 

      } 

      guard let dict = responseObject as? [String: AnyObject] else { 
       let errorMessage = "Error" 
       let error = NSError(domain: "xxxxxxxxx", code: -1, userInfo: [NSLocalizedDescriptionKey : errorMessage]) 
       completion(error: error) 
       return 


      } 

      let moc = NSManagedObjectContext.MR_defaultContext() 
      PreObject.createPreObjectwithDictionary(dict, inContext: moc) 
      moc.MR_saveToPersistentStoreAndWait() 
      completion(error: nil) 
     } 
     task.resume() 
    } 

사전 :

- (NSMutableDictionary *)dictionaryBackend { 

    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 

    dict[@"description"] = description == nil ? [NSNull null] : description; 
    dict[@"payer"] = @{@"id": self.payer.identifier, 
         @"type": @"xxxxx"}; 

    if ([self.amount doubleValue] == [self.amount intValue]) { 
     NSNumber *number = [NSNumber numberWithDouble:[self.amount doubleValue] + 0.001]; 
     dict[@"amount"] = number; 

    } else { 
     dict[@"amount"] = self.amount; 
    } 

    NSDateFormatter *dateFormatter = [ServicesUtils defaultDateFormatter]; 
    dict[@"occurred_at"] = [dateFormatter stringFromDate:self.occuredAt]; 

    dict[@"tags"] = [self tagsSeparatedByComma]; 
    dict[@"location"] = self.address == nil ? [NSNull null] : self.address; 
    dict[@"currency"] = self.currency; 

      return dict; 

내가있는 UIButton 애플 리케이션 사고로 누르고 디버그 영역이 오류를 표시하는 경우 :

* 종료 응용 프로그램 du 전자 캐치되지 않는 예외 'NSInvalidArgumentException', 이유에 '* - [__ NSPlaceholderDictionary initWithObjects : forKeys : 수 :] : 시도가 객체 [0]에서 전무 개체를 삽입하는'

누군가가 나를 도울 수 있습니까?

답변

1

이 충돌은 일반적으로 nil 값을 사용하여 사전을 만들려고 할 때 발생합니다. 라인 전

확인 :

dict[@"payer"] = @{@"id": self.payer.identifier, 
        @"type": @"xxxxx"}; 

self.player.identifier이 전무 경우.

다른 응용 프로그램에서 다른 것을 의미 할 수 있기 때문에 그것이 nil 일 때해야 할 조언을 할 수 없습니다.