2017-05-19 3 views
0

私は次の必須パラメータにHTTP POST要求がオブジェクト[0]からnilオブジェクトを挿入しようとしましたか?

説明送信する必要があるサーバーにHTTPリクエストを送信しようとしている:私は量として文字列

:文字列、金額:フロート、occurred_at:文字列、場所をそれをテキストフィールドに渡す必要があります(他のフィールドはAPIを経由しています)。SegueはPreObjectオブジェクトを量が必要なビューに渡しました。

魔法録音PreObject

オブジェクト

ために使用される

((エンティティ:PreObject; ID: 0xd000000000040006 ; データ:{ 量=ゼロ、 creatingOnBackend = 1; 通貨= nil; description = ""; 費用=なし; 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; 

iはUIButtonアプリケーションのクラッシュにタップしてデバッグ領域にこのエラーを示します。

*終了アプリケーションduキャッチされない例外へのE 'NSInvalidArgumentExceptionは'、理由: '* - [__ NSPlaceholderDictionary initWithObjects:forKeys:カウント:]: オブジェクトからはnilオブジェクトを挿入しようとする試み[0]'

誰かが私を助けることができますか?

答えて

1

このクラッシュは、通常、nil値の辞書を作成しようとした場合に発生します。行の前に

チェック:

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

self.player.identifierがnilである場合。

これは、異なるアプリケーションでは異なることを意味する可能性があるため、nilの場合には何をすべきかアドバイスできません。

関連する問題