Chithri Ajay
Chithri Ajay

Reputation: 917

NSUrlConnection not handling PUT method

I am Trying to Update data through NSUrlConnection using PUT method. For adding data i am using POST method it's working fine but the same time PUT it's not working.

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];

I am sending JSON Data to this api {"id":3,"active":false} after that i am getting error

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

Any help would be appreciated thanks

Upvotes: 1

Views: 3417

Answers (2)

alexbumbu
alexbumbu

Reputation: 331

I had the same problem and after some google search I've found out that adding the following line of code to the NSMutableURLRequest *req will do it:

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

Found this on Jeff LaMarche blog: http://iphonedevelopment.blogspot.ro/2008/06/http-put-and-nsmutableurlrequest.html

Upvotes: 4

Vizllx
Vizllx

Reputation: 9246

So what it looks like to me is that you don't actually have JSON.

Are you Sure this have values in it:

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

Unless you pass the option NSJSONReadingAllowFragments to [NSJSONSerialization JSONObjectWithData:options:error:] the response from the server must be valid JSON with a top level container which is an array or dictionary.

for example:

{ "response" : "Success" }

P.S. If you want a mutable dictionary you must also include NSJSONReadingMutableContainers in your options.

Upvotes: 1

Related Questions