HTTP POST 请求返回尝试从 objects[0] 插入 nil 对象?

Posted

技术标签:

【中文标题】HTTP POST 请求返回尝试从 objects[0] 插入 nil 对象?【英文标题】:HTTP POST request return attempt to insert nil object from objects[0] ? 【发布时间】:2017-05-19 22:25:55 【问题描述】:

我正在尝试向需要发送以下必需参数的服务器发送 http 请求

描述:字符串,金额:浮动,发生时间:字符串,位置:字符串

由于我需要通过文本字段(其他字段来自 API)传递它的数量已被设置为 Segue,将 PreObject 对象传递给需要数量的视图。

Magical Record 用于对象

前置对象

( (实体: PreObject; id: 0xd000000000040006 ; 数据: 金额=无; 创建OnBackend = 1; 货币 = 无; 描述 = ""; 费用=零; 额外信息=“0xd000000001400010”; 标识符 = 47; 忽略At = nil; 位置=无; 发生时间=“2017-03-12 00:00:00 +0000”; 参与者=“”; 付款人=无; 接收者=无; 状态=无; 标签 = ""; ))

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 应用程序崩溃并在调试区域显示此错误时:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: 尝试插入 nil 对象 对象[0]'

有人可以帮助我吗?

【问题讨论】:

【参考方案1】:

此崩溃通常是由于尝试使用 nil 值创建字典造成的。

行前检查:

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

如果 self.player.identifier 为 nil。

当它为 nil 时,我无法建议你应该做什么,因为这在不同的应用程序中可能意味着不同的东西。

【讨论】:

以上是关于HTTP POST 请求返回尝试从 objects[0] 插入 nil 对象?的主要内容,如果未能解决你的问题,请参考以下文章

(object Object) 从 Node 中的 JSON 请求返回

从Vue js到Laravel的axios.post数组,在我的请求中只得到[object Object]

如何从 .POST HTTP 请求访问重定向的 URL 响应

从 javascript Web 服务客户端发送 CORS POST 请求返回 http 405 错误

objective-c HTTP POST 以表单形式发送请求

PHP:如何从 $.post 请求返回数据作为响应?