2010-04-09 74 views
1

我想序列化一个对象,其中包含一些数据字段...其中一个字段的数据类型NSData将不会序列化。我遵循http://www.isolated.se的指示,但我的代码(见下文)导致错误“[NSConcreteData data]:无法识别的选择器发送到实例...”。我如何序列化我的对象?如何序列化包含NSData的对象?

头文件

@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 
+0

您在NSData * d中设置哪种数据类型?请检查是否NSCoding投诉.... – 2010-04-09 14:02:34

回答

0

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

尝试重构data到类似“theData”或“myData”的东西,看看问题是否解决。

+0

我根据你的建议做了一些更新,但问题依然存在。我也忘了提及我用serialize方法将对象序列化到NSData。 – AOO 2010-04-09 13:45:03

+0

好的,那么你需要追踪到错误的确切位置,然后将代码发布到该行。你现在编写的代码应该可以工作,因此你的问题可以在别处找到。 – TechZen 2010-04-09 14:35:43

相关问题