2010-04-09 4 views
1

J'essaie de sérialiser un objet contenant un certain nombre de champs de données ... où l'un des champs est de type NSData qui ne sera pas sérialisé. J'ai suivi les instructions à http://www.isolated.se mais mon code (voir ci-dessous) entraîne l'erreur "[NSConcreteData data]: sélecteur non reconnu envoyé à l'instance ...". Comment puis-je sérialiser mon objet?Comment sérialiser un objet contenant NSData?

fichier d'en-tête:

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

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

- (NSData*) serialize; 

@end 

fichier de mise en œuvre:

@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

quel type de données définissez-vous dans NSData * d? S'il vous plaît vérifier si c'est plainte NSCoding .... –

Répondre

0

Votre problème est très probablement une collision nommant causée par l'utilisation data comme nom de la propriété, car sinon le code semble bien et les deux NSString et NSData devrait sérialiser facilement. Essayez de refactoriser data en quelque chose comme "theData" ou "myData" et de voir si le problème se résout.

+0

J'ai fait quelques mises à jour ci-dessus en fonction de vos suggestions, mais le problème persiste. J'ai également oublié de mentionner que je sérialise l'objet à NSData avec la méthode serialize. – AOO

+0

Bon, alors vous avez besoin de suivre l'erreur jusqu'à la ligne exacte où il échoue et ensuite poster le code autour de cette ligne. Le code que vous avez maintenant devrait fonctionner de sorte que votre problème réside ailleurs. – TechZen

Questions connexes