我需要使用sendDataToAllPeers:withDataMode:error:
通过GameKit传输一个整数,但是我不知道如何将我的NSNumber转换为NSData才能发送。我目前有:
NSNumber *indexNum = [NSNumber numberWithInt:index];
[gkSession sendDataToAllPeers:indexNum withDataMode:GKSendDataReliable error:nil];
但很明显,在我发送它之前,需要将indexNum转换为NSData。有谁知道怎么做吗?
谢谢!
发布于 2011-01-14 18:07:44
对于如此简单的任务,我不推荐使用NSKeyedArchiver
,因为它在上面增加了PLIST开销和类版本控制。
Pack:
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"
发布于 2011-01-14 17:52:08
要存储它,请执行以下操作:
NSData *numberAsData = [NSKeyedArchiver archivedDataWithRootObject:indexNum];
要将其转换回NSNumber,请执行以下操作:
NSNumber *indexNum = [NSKeyedUnarchiver unarchiveObjectWithData:numberAsData];
发布于 2011-01-14 17:51:46
为什么不像这样直接发送整数:
NSData * indexData = [NSData dataWithBytes:&index length:sizeof(index)];
[gkSession sendDataToAllPeers:indexData withDataMode:GKSendDataReliable error:nil];
https://stackoverflow.com/questions/4689689
复制相似问题