Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert NSArray to NSData?

Tags:

iphone

Can anyone tell me how to convert an NSArray to an NSData? I have an NSArray. I need to send it to an NSInputStream. In order to do that I need to convert the NSArray to an NSData.

Please help me, I'm stuck here.

like image 448
satish Avatar asked Aug 17 '09 04:08

satish


People also ask

Can Nsarray contain nil?

arrays can't contain nil.

What is NSData in IOS?

Overview. NSData and its mutable subclass NSMutableData provide data objects, or object-oriented wrappers for byte buffers. Data objects let simple allocated buffers (that is, data with no embedded pointers) take on the behavior of Foundation objects.


2 Answers

Use NSKeyedArchiver (which is the last sentence of the post Garrett links):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; 

Note that all the objects in array must conform to the NSCoding protocol. If these are custom objects, then that means you need to read up on Encoding and Decoding Objects.

Note that this will create a fairly hard-to-read property list format, but can handle a very wide range of objects. If you have a very simple array (strings for instance), you may want to use NSPropertyListSerialization, which creates a bit simpler property list:

NSString *error; NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error]; 

There's also an XML format constant you can pass if you'd rather it be readable on the wire.

like image 176
Rob Napier Avatar answered Oct 29 '22 13:10

Rob Napier


On a somewhat related note, here's how you would convert the NSData back to an NSArray:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data] 
like image 39
Michael Thiel Avatar answered Oct 29 '22 11:10

Michael Thiel