2010-11-20 4 views
1

J'ai un dictionnaire (il est mutable si cela fait une différence) qui contient NSArrays, qui contiennent à leur tour (sous-classe de NSObject) s j'ai mis en œuvre initWithCoder et encodeWithCoder comme ceci:Enregistrement d'un NSDictionary de NSArrays d'objets personnalisés

-(id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super init]; 
    self.Title = [aDecoder decodeObjectForKey:@"Title"]; 
    self.SiteAPIURL = [aDecoder decodeObjectForKey:@"SiteAPIURL"]; 
    self.ID = [aDecoder decodeObjectForKey:@"ID"]; 
    return self; 
} 

-(void) encodeWithCoder:(NSCoder *)aCoder { 
    [aCoder encodeObject:self.Title forKey:@"Title"]; 
    [aCoder encodeObject:self.SiteAPIURL forKey:@"SiteAPIURL"]; 
    [aCoder encodeObject:self.ID forKey:@"ID"]; 
} 

Mais il ne sauve pas correctement quand je fais [dictionary writeToFile:savepath atomically:YES]; Alors qu'est-ce que je fais mal, et ce qui est sérialisation et ai-je besoin que je dois utiliser exactement NSKeyedArchiver ou quelque chose?

+0

avez-vous été en mesure de comprendre cela? J'ai la même structure de données exacte (différents objets personnalisés dans le tableau bien sûr) et j'ai essayé d'implémenter la sauvegarde de mon dictionnaire pour quelques jours maintenant. J'ai également implémenté initWitCoder et encodeWithCoder dans ma classe d'objets, et j'ai essayé d'utiliser UserDefaults et plists, mais je n'arrive pas à travailler. Toute aide appréciée! – RyanG

+0

@Ryan, vous devez utiliser NSKeyedArchiver et le protocole NSCoding, voir la réponse acceptée et les docs Apple. –

Répondre

2

[NSDictionary writeToFile: atomically:] utilise NSPropertyListSerialization, qui ne peut enregistrer un sous-ensemble d'objets primitifs (numéros , cordes, dates et données). Alors que vous pouvez utiliser NSCoding avec NSKeyedArchiver pour archiver les objets, une autre option consiste à rassembler vos objets dans une chaîne ou représentation de données, stocker que dans la liste des propriétés, et les démasquer à nouveau lors du chargement.