我有一些CGPoint
s 需要存储在一个NSDictionary
然后写入文件中。稍后,我需要能够将文件加载到 aNSDictionary
并访问其中CGPoint
。
self.dict
是我要存储点的 NSDictionary。
- (void)setPoint:(CGPoint)point forKey:(NSString *)key {
NSValue *value = [NSValue valueWithCGPoint:point];
[self.dict setValue:value forKey:key];
}
我还希望对信息进行加密。所以我将它转换NSDictionary
为NSData
加密它。
- (void)encryptDictionaryWithKey:(NSData *)key writeToFile:(NSString *)file {
NSData *encryptedDict = [[NSKeyedArchiver archivedDataWithRootObject:self] encryptWithKey:key];
[encryptedDict writeToFile:file atomically:YES];
}
然后从文件中获取信息,解密,并放入NSDictionary
表格中:
+ (NSDictionary *)dictionaryWithContentsOfEncryptedData:(NSData *)data decryptWithKey:(NSData *)key {
NSData *decryptedData = [data decryptedWithKey:key];
return (NSDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:decryptedData];
}
我可以将一些其他值(如NSNumber
)放入NSDictionary
,对其进行加密并将其写入文件,然后从文件中获取它并对其进行解密......并且该值仍然是完整的。所以我的代码似乎很好。但它不适用于NSValue
.
我用它从NSValue
. 此时,self.plist
可能已经(但不一定)加密,写入文件,然后设置为文件的未加密版本。
- (CGPoint)pointForKey:(NSString *)key {
NSValue *value = [self.prefs objectForKey:key];
return [value CGPointValue];
}
如果已加密、写入文件、然后从文件加载且未加密,则此代码仅返回 0,0(和value == nil
) 。self.plist
因此,在写入文件的过程中似乎将NSValue
with设置为。我不知道我做错了什么,所以任何帮助表示赞赏。谢谢!CGPoint
nil