J'ai quelques CGPoint
s que j'ai besoin de stocker dans un NSDictionary
puis écrire dans un fichier. Plus tard, je dois être en mesure de charger le fichier dans un NSDictionary
et accéder au CGPoint
à l'intérieur.Comment stocker des objets dans plist
self.dict
est le NSDictionary Je veux stocker points.
- (void)setPoint:(CGPoint)point forKey:(NSString *)key {
NSValue *value = [NSValue valueWithCGPoint:point];
[self.dict setValue:value forKey:key];
}
Je veux aussi les informations à chiffrer. Donc, je convertis le NSDictionary
en NSData
pour le crypter.
- (void)encryptDictionaryWithKey:(NSData *)key writeToFile:(NSString *)file {
NSData *encryptedDict = [[NSKeyedArchiver archivedDataWithRootObject:self] encryptWithKey:key];
[encryptedDict writeToFile:file atomically:YES];
}
ensuite pour obtenir les informations à partir du fichier, le déchiffrer, et le mettre dans NSDictionary
forme:
+ (NSDictionary *)dictionaryWithContentsOfEncryptedData:(NSData *)data decryptWithKey:(NSData *)key {
NSData *decryptedData = [data decryptedWithKey:key];
return (NSDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:decryptedData];
}
je peux mettre d'autres valeurs (comme NSNumber
) dans le NSDictionary
, chiffrez et écrivez-le dans un fichier, puis récupérez-le à partir du fichier et décryptez-le ... et la valeur est toujours intacte. Donc mon code semble aller bien. Mais cela ne fonctionnera pas avec NSValue
.
Je l'utilise pour obtenir CGPoint de NSValue
. À ce stade, self.plist
peut avoir été (mais pas nécessairement) chiffré, écrit dans un fichier, puis défini sur une version non cryptée du fichier.
- (CGPoint)pointForKey:(NSString *)key {
NSValue *value = [self.prefs objectForKey:key];
return [value CGPointValue];
}
Ce code renvoie uniquement 0,0 (et value == nil
) si self.plist
a été chiffré, écrit dans le fichier, puis chargé à partir du fichier et non crypté.
Le NSValue
avec CGPoint
semble être défini sur nil
pendant le processus d'écriture dans le fichier. Je n'ai aucune idée de ce que j'ai fait de mal, donc toute aide est appréciée. Merci!