2011-04-11 5 views
0

Dans mon People.h, je mets en œuvre NSCoding, En People.m:Pourquoi je ne peux pas convertir NSString à NSData

@implementation People 
@synthesize name; 

- (void) encodeWithCoder:(NSCoder *)aCoder { 
    [aCoder encodeObject:name forKey:@"name"]; 
} 



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

@end 

Dans ma fonction viewDidLoad du contrôleur.

People *people1 = [[People alloc] init]; 
people1.name = @"kevin"; 


NSData *saveData = [NSKeyedArchiver archivedDataWithRootObject:people1]; 

NSString *saveDataString = [[NSString alloc] initWithData:saveData encoding:NSASCIIStringEncoding]; 
NSData *resultData = [saveDataString dataUsingEncoding:NSASCIIStringEncoding]; 

People *people2 = [NSKeyedUnarchiver unarchiveObjectWithData:resultData]; 
NSLog(@"%@",people2.name); 


[super viewDidLoad]; 

Pourquoi j'ai une valeur nulle à la fin de cette fonction. Ai-je eu quelques erreurs?

Merci!

+0

Le but pourquoi je aime ce que je dois garder l'objet NSString dans ma base de données SQLite. – Daemon

Répondre

0

On dirait que vous essayez de désarchiver Peopla de NSString, essayez cette

NSData *saveData = [NSKeyedArchiver archivedDataWithRootObject:people1]; 
People *people2 = [NSKeyedUnarchiver unarchiveObjectWithData:saveData]; 
+0

Merci pour votre rediffusion. J'ajoute quelques codes entre ton code car j'ai besoin de sauvegarder ce NSData dans mon sqlite. Quand j'obtiens le NSData d'un NSString, il y aura une erreur. – Daemon

+0

Ce que vous obtenez est des données binaires, si vous avez besoin de transférer vers et depuis la base de données en utilisant une chaîne, vous devez l'encoder et je pense que NSASCIIStringEncoding n'est pas suffisant. avez-vous essayé de l'enregistrer en tant que données binaires, pas de chaîne? Serait mieux. Ou en tant que chaîne convertie base64. –

+0

le point est après que je convertis NSData en NSString, puis convertit NSString en NSData, je ne peux pas l'objet de personnes unarchiveObject de la nouvelle NSData. Je ne connais pas la raison. Merci encore – Daemon