objective c属性列表和二进制文件的互操作
2015-02-04 15:30
399 查看
objective c属性列表和二进制文件的互操作
属性列表中出现[NSNull null]的成员时候会有问题,不能序列化和反序列化。
以下是windows下的输出结果:
C:\GNUstep\msys\1.0\home\pro\cpro>cpro.exe
2015-02-04 15:25:59.425 cpro[2988] key=1 object=hello world
2015-02-04 15:25:59.440 cpro[2988] key=2 object=1
2015-02-04 15:25:59.440 cpro[2988] key=3 object=10.123
2015-02-04 15:25:59.440 cpro[2988] key=4 object=(ABC, 999)
2015-02-04 15:25:59.440 cpro[2988] key=1 object=hello world
2015-02-04 15:25:59.440 cpro[2988] key=2 object=1
2015-02-04 15:25:59.440 cpro[2988] key=3 object=10.123
2015-02-04 15:25:59.440 cpro[2988] key=4 object=(ABC, 999)
2015-02-04 15:25:59.440 cpro[2988] key=1 object=hello world
2015-02-04 15:25:59.440 cpro[2988] key=2 object=1
2015-02-04 15:25:59.440 cpro[2988] key=3 object=10.123
2015-02-04 15:25:59.440 cpro[2988] key=4 object=(ABC, 999)
2015-02-04 15:25:59.440 cpro[2988] key=1 object=hello world
2015-02-04 15:25:59.440 cpro[2988] key=2 object=1
2015-02-04 15:25:59.440 cpro[2988] key=3 object=10.123
2015-02-04 15:25:59.440 cpro[2988] key=4 object=(ABC, 999)
2015-02-04 15:25:59.440 cpro[2988] key=5 object=good 5已经被添加了,但是dictionary是无序的
2015-02-04 15:25:59.440 cpro[2988] key=1 object=hello world
2015-02-04 15:25:59.440 cpro[2988] key=2 object=1
2015-02-04 15:25:59.440 cpro[2988] key=3 object=10.123
2015-02-04 15:25:59.440 cpro[2988] key=4 object=(ABC, 999)
#import <Foundation/Foundation.h> void print_dictionary(id t); int main(const int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; NSError *error; NSData *data; NSArray *objects, *keys, *array; NSDictionary *dict; error = nil; array = [NSArray arrayWithObjects: @"ABC", [NSNumber numberWithInt: 999], nil]; objects = [NSArray arrayWithObjects: @"hello world", [NSNumber numberWithInt: 1], [NSNumber numberWithFloat: 10.123], array, nil ]; keys = [NSArray arrayWithObjects: [NSNumber numberWithInt: 1], [NSNumber numberWithInt: 2], [NSNumber numberWithInt: 3], [NSNumber numberWithInt: 4], nil ]; dict = [NSDictionary dictionaryWithObjects: objects forKeys: keys]; print_dictionary(dict); data = [NSPropertyListSerialization dataWithPropertyList: dict format: NSPropertyListBinaryFormat_v1_0 options: NSPropertyListBinaryFormat_v1_0 error: &error]; [data writeToFile: @"a.bin" atomically: TRUE]; print_dictionary(dict); NSDictionary *dict1; NSData *data1; NSPropertyListFormat format; error = nil; format = NSPropertyListBinaryFormat_v1_0; data1 = [NSData dataWithContentsOfFile: @"a.bin"]; dict1 = [NSPropertyListSerialization propertyListWithData: data1 options: NSPropertyListBinaryFormat_v1_0 format: &format error: &error]; print_dictionary(dict1); NSMutableDictionary *dict2; NSData *data2; NSString *errorDesc; format = NSPropertyListBinaryFormat_v1_0; error = nil; data2 = [NSData dataWithContentsOfFile: @"a.bin"]; dict2 = [NSPropertyListSerialization propertyListFromData: data2 mutabilityOption: NSPropertyListMutableContainers format: &format errorDescription: &errorDesc]; print_dictionary(dict2); [dict2 setObject: @"good" forKey: [NSNumber numberWithInt: 5]]; print_dictionary(dict2); [pool drain]; return 0; } void print_dictionary(id t) { id object, key; for (key in [t keyEnumerator]) { object = [t objectForKey: key]; NSLog(@"key=%@ object=%@", key, object); } }
属性列表中出现[NSNull null]的成员时候会有问题,不能序列化和反序列化。
以下是windows下的输出结果:
C:\GNUstep\msys\1.0\home\pro\cpro>cpro.exe
2015-02-04 15:25:59.425 cpro[2988] key=1 object=hello world
2015-02-04 15:25:59.440 cpro[2988] key=2 object=1
2015-02-04 15:25:59.440 cpro[2988] key=3 object=10.123
2015-02-04 15:25:59.440 cpro[2988] key=4 object=(ABC, 999)
2015-02-04 15:25:59.440 cpro[2988] key=1 object=hello world
2015-02-04 15:25:59.440 cpro[2988] key=2 object=1
2015-02-04 15:25:59.440 cpro[2988] key=3 object=10.123
2015-02-04 15:25:59.440 cpro[2988] key=4 object=(ABC, 999)
2015-02-04 15:25:59.440 cpro[2988] key=1 object=hello world
2015-02-04 15:25:59.440 cpro[2988] key=2 object=1
2015-02-04 15:25:59.440 cpro[2988] key=3 object=10.123
2015-02-04 15:25:59.440 cpro[2988] key=4 object=(ABC, 999)
2015-02-04 15:25:59.440 cpro[2988] key=1 object=hello world
2015-02-04 15:25:59.440 cpro[2988] key=2 object=1
2015-02-04 15:25:59.440 cpro[2988] key=3 object=10.123
2015-02-04 15:25:59.440 cpro[2988] key=4 object=(ABC, 999)
2015-02-04 15:25:59.440 cpro[2988] key=5 object=good 5已经被添加了,但是dictionary是无序的
2015-02-04 15:25:59.440 cpro[2988] key=1 object=hello world
2015-02-04 15:25:59.440 cpro[2988] key=2 object=1
2015-02-04 15:25:59.440 cpro[2988] key=3 object=10.123
2015-02-04 15:25:59.440 cpro[2988] key=4 object=(ABC, 999)
相关文章推荐
- windows 下 文件属性及目录列表操作
- VB 写的二进制文件读写数据库操作模块
- Delphi中的操作二进制文件的两个重要函数
- C# 文件操作(上传 下载 删除 文件列表...)
- java中对于文件属性的一些操作
- 使用Java操作二进制文件 (转)
- 使用Java操作二进制文件
- (转)java中对于文件属性的一些操作
- C# 文件操作(上传 下载 删除 文件列表...)
- SqlHelper改的OleDbHelper,OleDbHelper新增、修改、删除(操作二进制文件)
- VB中关于文件及二进制操作的经验
- C# 文件操作(上传 下载 删除 文件列表...)
- ~~~二进制文件操作~~~
- Emacs与文件操作和帮助相关的命令列表
- C#的二进制文件操作及汉字编码转换
- 使用Java操作二进制文件 示例
- 使用Java操作二进制文件
- C#中oracle二进制文件操作(新增、修改)
- C# 对sharepoint 列表的一些基本操作,包括添加/删除/查询/上传文件给sharepoint list添加数据
- poi读取文件,并获取相应属性 (java操作Excel文件)