How do I convert an NSNumber to NSData? How do I convert an NSNumber to NSData? objective-c objective-c

How do I convert an NSNumber to NSData?


I would not recommend NSKeyedArchiver for such a simple task, because it adds PLIST overhead on top of it and class versioning.

Pack:

NSUInteger index = <some number>;NSData *payload = [NSData dataWithBytes:&index length:sizeof(index)];

Send:

[session sendDataToAllPeers:payload withDataMode:GKSendDataReliable error:nil];

Unpack (in the GKSession receive handler):

NSUInteger index;[payload getBytes:&index length:sizeof(index)];

Swift

var i = 123let data = NSData(bytes: &i, length: sizeof(i.dynamicType))var i2 = 0data.getBytes(&i2, length: sizeof(i2.dynamicType))print(i2) // "123"


To store it:

NSData *numberAsData = [NSKeyedArchiver archivedDataWithRootObject:indexNum];

To convert it back to NSNumber:

NSNumber *indexNum = [NSKeyedUnarchiver unarchiveObjectWithData:numberAsData]; 


Why not send the integer directly like this:

NSData * indexData = [NSData dataWithBytes:&index length:sizeof(index)];[gkSession sendDataToAllPeers:indexData withDataMode:GKSendDataReliable error:nil];