如何序列化包含NSData的对象?

时间:2010-04-09 13:24:16

标签: iphone serialization nsdata

我正在尝试序列化包含许多数据字段的对象...其中一个字段是数据类型NSData,它不会序列化。我已按照 http://www.isolated.se的说明操作,但我的代码(见下文)导致错误“[NSConcreteData data]:无法识别的选择器发送到实例...”。如何序列化我的对象?

标题文件:

@interface Donkey : NSObject<NSCoding>
{
   NSString* s;
   NSData* d;
}

@property (nonatomic, retain) NSString* s;
@property (nonatomic, retain) NSData* d;

- (NSData*) serialize;

@end

实施档案:

@implementation Donkey

@synthesize s, d;

static NSString* const KEY_S = @"string";
static NSString* const KEY_D = @"data";

- (void) encodeWithCoder:(NSCoder*)coder
{
    [coder encodeObject:self.s forKey:KEY_S];
    [coder encodeObject:self.d forKey:KEY_D];
}

- (id) initWithCoder:(NSCoder*)coder;
{
    if(self = [super init])
    {
        self.s = [coder decodeObjectForKey:KEY_S];
        self.d = [coder decodeObjectForKey:KEY_D];
    }

    return self;
}

- (NSData*) serialize
{
    return [NSKeyedArchiver archivedDataWithRootObject:self];
}

@end

1 个答案:

答案 0 :(得分:0)

您的问题很可能是使用data作为属性名称导致的命名冲突,因为否则代码看起来很好,NSString和NSData都应该很容易序列化。

尝试将data重构为“theData”或“myData”之类的内容,并查看问题是否已解决。