如何将NSNumber转换为NSData?

我需要通过使用sendDataToAllPeers:withDataMode:error:发送一个整数GameKit sendDataToAllPeers:withDataMode:error:但我不知道如何将我的NSNumber转换为NSData为了发送。 我目前有:

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

但显然indexNum需要转换为NSData之前,我可以发送它。 有谁知道如何做到这一点?

谢谢!

我不会推荐NSKeyedArchiver来完成这样一个简单的任务,因为它在它和类的版本控制之上添加了PLIST开销。

包:

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

发送:

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

解压缩(在GKSession接收处理程序中):

 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" 

要存储它:

 NSData *numberAsData = [NSKeyedArchiver archivedDataWithRootObject:indexNum]; 

将其转换回NSNumber:

 NSNumber *indexNum = [NSKeyedUnarchiver unarchiveObjectWithData:numberAsData]; 

为什么不直接像这样发送整数:

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

有关如何发送不同有效负载的更详细示例,可以查看包含在XCode文档中的GKRocket示例。