我有一些CGPoint
我需要存储在NSDictionary
然后写入文件。稍后,我需要能够将文件加载到NSDictionary
并访问其中的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
获取CGPoint。此时,self.plist
可能已经(但不一定)加密,写入文件,然后设置为文件的未加密版本。
- (CGPoint)pointForKey:(NSString *)key {
NSValue *value = [self.prefs objectForKey:key];
return [value CGPointValue];
}
如果value == nil
已加密,写入文件,然后从文件加载并且未加密,则此代码仅返回0,0(和self.plist
)。
因此,在写入文件的过程中NSValue
CGPoint
似乎设置为nil
。我不知道我做错了什么,所以感谢任何帮助。谢谢!
答案 0 :(得分:0)
您可以将CGPoint
转换为可以存储在plist中的对象。例如,
CGPointCreateDictionaryRepresentation()
function会将CGPoint
转换为NSDictionary
(或者更确切地说,CFDictionaryRef
可以转换为NSDictionary
。您可以将其存储在plist中,然后在加载plist时使用CGPoint
随附函数将其返回转换为CGPointMakeWithDictionaryRepresentation()
。