我尝试使用蓝牙在两台设备之间传输数据。我想将自定义NSObject转换为NSData。
将收到的NSData解码为自定义NSObject的最佳方法是什么?
谢谢!
答案 0 :(得分:4)
您必须使用NSCoding
。 NSCoding
是一个简单的协议,有两种方法:initWithCoder:
和encodeWithCoder:
。符合NSCoding
的类可以序列化和反序列化为可以存档到磁盘或通过网络分布的数据。
NSCoding / NSKeyedArchiver.
这是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