首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将NSNumber转换为NSData?

如何将NSNumber转换为NSData?
EN

Stack Overflow用户
提问于 2011-01-14 17:39:49
回答 4查看 18.9K关注 0票数 19

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

代码语言:javascript
复制
NSNumber *indexNum = [NSNumber numberWithInt:index];
[gkSession sendDataToAllPeers:indexNum withDataMode:GKSendDataReliable error:nil];

但很明显,在我发送它之前,需要将indexNum转换为NSData。有谁知道怎么做吗?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-14 18:07:44

对于如此简单的任务,我不推荐使用NSKeyedArchiver,因为它在上面增加了PLIST开销和类版本控制。

Pack:

代码语言:javascript
复制
NSUInteger index = <some number>;
NSData *payload = [NSData dataWithBytes:&index length:sizeof(index)];

发送:

代码语言:javascript
复制
[session sendDataToAllPeers:payload withDataMode:GKSendDataReliable error:nil];

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

代码语言:javascript
复制
NSUInteger index;
[payload getBytes:&index length:sizeof(index)];

斯威夫特

代码语言:javascript
复制
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"
票数 35
EN

Stack Overflow用户

发布于 2011-01-14 17:52:08

要存储它,请执行以下操作:

代码语言:javascript
复制
NSData *numberAsData = [NSKeyedArchiver archivedDataWithRootObject:indexNum];

要将其转换回NSNumber,请执行以下操作:

代码语言:javascript
复制
NSNumber *indexNum = [NSKeyedUnarchiver unarchiveObjectWithData:numberAsData]; 
票数 22
EN

Stack Overflow用户

发布于 2011-01-14 17:51:46

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

代码语言:javascript
复制
NSData * indexData = [NSData dataWithBytes:&index length:sizeof(index)];
[gkSession sendDataToAllPeers:indexData withDataMode:GKSendDataReliable error:nil];
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4689689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档