将Custom NSObject转换为NSData

时间:2016-07-27 13:06:21

标签: ios objective-c nsdata nsobject multipeer-connectivity

我尝试使用蓝牙在两台设备之间传输数据。我想将自定义NSObject转换为NSData。

将收到的NSData解码为自定义NSObject的最佳方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

您必须使用NSCodingNSCoding是一个简单的协议,有两种方法:initWithCoder:encodeWithCoder:。符合NSCoding的类可以序列化和反序列化为可以存档到磁盘或通过网络分布的数据。

NSCoding / NSKeyed​Archiver. 这是NSCoding的教程。

<强>归档

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:YourClass];

<强>取消存档

YourClass *objYourClass = [NSKeyedUnarchiver unarchiveObjectWithData:data];

您也可以推荐我的answer。首先,您必须创建Bean类并实现initWithCoder:encodeWithCoder:之后,您可以从bean类对象归档NSData,从NSData归档Unarchive bean类对象。

答案 1 :(得分:0)

我非常简单的回答

首先我们必须在NSObject.m中实现encodeWithCoder和initWithCoder,在此之前我在NSObject类中有2个数据(用户名和密码)。例如我设置了这个。你可以理解

- (void)encodeWithCoder:(NSCoder *)encoder 
{
  //Encode properties, other class variables, etc
  [encoder encodeObject:@"Dev" forKey:@"username"];
  [encoder encodeObject:@"Test@123" forKey:@"password"];
}

- (id)initWithCoder:(NSCoder *)decoder 
{
  if((self = [super init]))
  {
    //decode properties, other class vars
    userName = [decoder decodeObjectForKey:@"username"];
    passWord = [decoder decodeObjectForKey:@"password"];
  }
  return self;
}

然后在ViewController.m

保存

NSObjectClass *className = [[NSObjectClass alloc]init];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:className];
[currentDefaults setObject:data forKey:@"DATA"];
[currentDefaults synchronize];

用于检索

NSData *data = [currentDefaults objectForKey:@"DATA"];
className = [NSKeyedUnarchiver unarchiveObjectWithData:data];

更多详情请浏览我的ANSWER