我即将研究iPhone上的蓝牙互动。现在,我读到可以传输的唯一对象是NSData对象。现在,我想转移我的“角色”对象。该课程看起来像这样:
@interface Character : NSObject <NSCoding>
{
UIImage *characterImage;
int health;
NSString *name;
}
-(void) initWithStats;
-(void) addToViewController: (UIViewController *)theView;
-(void) encodeWithCoder:(NSCoder *)encoder;
-(void) initWithCoder:(NSCoder *)decoder;
@end
现在,我知道我必须遵守NSCoding协议并实现这两种方法,但是,我不太清楚这里要做什么。我知道我需要能够创建这个类的实例,然后在其他设备接收到NSData对象时“解压缩/解压缩”它们。
所以,这里的任何建议都非常感激:=)我对蓝牙编程很新,以前从未使用过那个或NSData。所以感谢先进:)
/ JBJ
答案 0 :(得分:4)
听起来你真的只是在询问如何实施-encodeWithCoder:
和-initWithCoder:
。这很简单:
-(void) encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:characterImage forKey:@"character image"];
[encoder encodeInt:health forKey:@"health"];
[encoder encodeObject:name forKey:@"name"];
}
这就是全部。除了您调用补充方法之外,-initWithCoder:
的工作方式完全相同,例如:characterImage = [decoder decodeObjectForKey:@"character image"];
。
如果您需要提供特定格式的数据以使用不支持存档格式的目标设备,您可以改为使用-encodeBytes:length:forKey:
方法存储您喜欢的任何内容,或者将您自己格式的数据写入NSMutableData对象,然后使用-encodeObject:forKey:
。您的目标设备可能仍需要在编码器存储的任何信封中找到您的数据;您可以通过从已知的一系列字节开始,使这更容易。我不确定你的情况是否有必要,但要记住这一点。