jowie jowie - 10 months ago 164
iOS Question

How do I convert an NSNumber to NSData?

I need to transmit an integer through GameKit using

but I don't know how to convert my NSNumber to NSData in order to send. I currently have:

NSNumber *indexNum = [NSNumber numberWithInt:index];
[gkSession sendDataToAllPeers:indexNum withDataMode:GKSendDataReliable error:nil];

but obviously the indexNum needs to be converted to NSData before I can send it. Does anyone know how to do this please?



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


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


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

Unpack (in the GKSession receive handler):

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


var i = 123
let data = NSData(bytes: &i, length: sizeof(i.dynamicType))

var i2 = 0
data.getBytes(&i2, length: sizeof(i2.dynamicType))

print(i2) // "123"