1

我正在尝试使用 PUT 方法通过 NSUrlConnection 更新数据。为了添加数据,我使用的是 POST 方法,它工作正常,但同时 PUT 不工作。

NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@update/%@?userId=%@",xapp.urlString,[dict valueForKey:@"id"],[profileDict valueForKey:@"id"]] ];
        NSError *error;
        NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];

        NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PUT"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:jsonData];
    updateHiveConnection=[NSURLConnection connectionWithRequest:request delegate:self];

我将 JSON 数据发送到这个 api {"id":3,"active":false} 之后我收到错误

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (No value.) UserInfo=0x1fb456f0 {NSDebugDescription=No value.}

任何帮助将不胜感激谢谢

4

2 回答 2

4

我遇到了同样的问题,经过一些谷歌搜索后,我发现将以下代码行添加到NSMutableURLRequest *req将做到这一点:

[req setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

在 Jeff LaMarche 博客上找到这个:http: //iphonedevelopment.blogspot.ro/2008/06/http-put-and-nsmutableurlrequest.html

于 2014-03-25T12:50:56.940 回答
1

所以在我看来,你实际上并没有 JSON。

你确定这有它的价值:

xapp.urlString,[dict valueForKey:@"id"],[profileDict valueForKey:@"id"]]

除非您将选项 NSJSONReadingAllowFragments 传递给 [NSJSONSerialization JSONObjectWithData:options:error:] ,否则来自服务器的响应必须是有效的 JSON,其顶级容器是数组或字典。

例如:

{ "response" : "Success" }

PS 如果你想要一个可变字典,你还必须在你的选项中包含 NSJSONReadingMutableContainers。

于 2013-10-25T07:52:16.177 回答