Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing NSData using NSLog

How can I print the contents of an NSData object using NSLog:

-(void) post:(NSString*) msg to:(NSString*) link{
    NSString *myRequestString = [NSString stringWithFormat:@"message=%@", msg];
    NSData *myRequestData = [NSData dataWithBytes: [myRequestString UTF8String] length: [myRequestString length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: link]]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
    [request setHTTPMethod: @"POST"];
    [request setHTTPBody: myRequestData];
    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
    NSLog("%@", *returnData); //doesn't work

}

I would like to print the contents of *returnData...

like image 903
user559142 Avatar asked Jul 08 '11 14:07

user559142


3 Answers

Convert NSData to NSString using

NSString *strData = [[NSString alloc]initWithData:returnData encoding:NSUTF8StringEncoding];

and print NSString in NSLog like below

NSLog(@"%@",strData);

This answer is edited for JeremyP, as he does not know how to know content is of UTF-8, though it was not a discussion of this question.

You can get response header in following delegate method

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSDictionary *dic = [httpResponse allHeaderFields];
}

This dictionary will give you entire header info like below

<CFBasicHash 0x5a45e40 [0x24b2380]>{type = immutable dict, count = 7,
entries =>
0 : <CFString 0x5d1bf60 [0x24b2380]>{contents = "X-Aspnet-Version"} = <CFString 0x5d21a60 [0x24b2380]>{contents = "2.0.50727"}
1 : <CFString 0x41a03a8 [0x24b2380]>{contents = "Server"} = <CFString 0x5d272f0 [0x24b2380]>{contents = "Microsoft-IIS/6.0"}
2 : <CFString 0x41a0010 [0x24b2380]>{contents = "Content-Length"} = <CFString 0x5d28630 [0x24b2380]>{contents = "385"}
6 : <CFString 0x419ff48 [0x24b2380]>{contents = "Cache-Control"} = <CFString 0x5d29c70 [0x24b2380]>{contents = "private, max-age=0"}
10 : <CFString 0x5d1c640 [0x24b2380]>{contents = "X-Powered-By"} = <CFString 0x5d26f10 [0x24b2380]>{contents = "ASP.NET"}
11 : <CFString 0x41a0060 [0x24b2380]>{contents = "Content-Type"} = <CFString 0x5d29c90 [0x24b2380]>{contents = "text/xml; charset=utf-8"}
12 : <CFString 0x41a0088 [0x24b2380]>{contents = "Date"} = <CFString 0x5d27610 [0x24b2380]>{contents = "Fri, 08 Jul 2011 15:23:10 GMT"}
} 

Check charset="utf-8", you will get encoding from here.

like image 72
iMOBDEV Avatar answered Nov 14 '22 09:11

iMOBDEV


If you do this:

NSLog(@"%@", returnData); 

The NSData will be logged in hex format. I think that is probably what you are after.

If you want to turn it into a string and log the string, you first need to find out what character set was used. The default character set for HTTP is not UTF-8, it is ISO-8859-1. One way to do that is to examine the Content-Type header for the charset section.

like image 31
JeremyP Avatar answered Nov 14 '22 09:11

JeremyP


One thing you must consider too:

NSLog(@"%@", *returnData); // this is wrong.

NSLog(@"%@", returnData); // this is correct.

I hope I could help!

like image 4
Daniel Herkenhoff Avatar answered Nov 14 '22 10:11

Daniel Herkenhoff