2010-04-09 77 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

相關問題