您的位置:首页 > 移动开发 > Objective-C

objective c属性列表和二进制文件的互操作

2015-02-04 15:30 399 查看
objective c属性列表和二进制文件的互操作

#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)


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective-c