自定义类的NSData?

时间:2012-02-15 18:34:16

标签: iphone objective-c xcode bluetooth nsdata

我即将研究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

1 个答案:

答案 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:。您的目标设备可能仍需要在编码器存储的任何信封中找到您的数据;您可以通过从已知的一系列字节开始,使这更容易。我不确定你的情况是否有必要,但要记住这一点。