12 cocoa serialization objective-c ios
我想存储NSMutableDictionary一些空值NSNull,然后使用属性列表序列化这些数据.问题是NSNull不允许的,我得到"属性列表格式无效"错误.这有解决方法吗?似乎非常令人惊讶的是他们没有NSNull列入有效的plist对象列表.
Sau*_*hwa 14
我在序列化之前将NSArray或NSDictionary转换为NSData.以下是nsarray上用于序列化和反序列化的类别.这舒适处理一些数据是nsnull
@implementation NSArray(Plist)
-(BOOL)writeToPlistFile:(NSString*)filename{
NSData * data = [NSKeyedArchiver archivedDataWithRootObject:self];
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * documentsDirectory = [paths objectAtIndex:0];
NSString * path = [documentsDirectory stringByAppendingPathComponent:filename];
BOOL didWriteSuccessfull = [data writeToFile:path atomically:YES];
return didWriteSuccessfull;
}
+(NSArray*)readFromPlistFile:(NSString*)filename{
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * documentsDirectory = [paths objectAtIndex:0];
NSString * path = [documentsDirectory stringByAppendingPathComponent:filename];
NSData * data = [NSData dataWithContentsOfFile:path];
return [NSKeyedUnarchiver unarchiveObjectWithData:data];
}
Run Code Online (Sandbox Code Playgroud)
请考虑使用NSKeyedArchiver和NSKeyedUnarchiver,而不是使用属性列表.属性列表具有一组固定的类型,并且不包括NSNull,并且不打算进行扩展.
以下是相关文档的链接:NSCoding,NSKeyedArchiver和NSKeyedUnarchiver.
不,没有办法放入NSNull财产清单.(Trivia:二进制属性列表格式实际上支持空值,但编写器不实现支持.)
对于字典,最简单的解决方法是简单地过滤掉空值,所以{foo ="bar"; baz = null; 变成{foo ="bar"; }.
| 归档时间: |
|
| 查看次数: |
6698 次 |
| 最近记录: |