iPad / iPhone 2D阵列序列化

时间:2011-08-31 18:04:08

标签: ipad serialization

我有一个2D数组,用于定义一个或多个路径中的点:

路径#1 =(1,1)(3,3)(6,6)

路径#2 =(5,3)(15,5)(16,46)

这是我的代码

NSArray path1 = make array of CGPoints
NSArray path2 = make array of CGPoints

NSMutableArray paths = [[NSMutableArray alloc] init];
[paths addObject:path1];
[paths addObject:path2];

问题:如何序列化/反序列化此对象?

1 个答案:

答案 0 :(得分:0)

只要数组中的所有对象都实现了大多数默认类所执行的NSCoding协议,您就应该能够使用NSKeyedArchiver序列化整个数组结构。

如果直接对文件进行归档/取消归档,则应该如下所示:

NSString *filename = @"[filename]";
[NSKeyedArchiver archiveRootObject:paths toFile:filename];
paths = [NSKeyedUnarchiver unarchiveObjectWithFile:filename];

如果你只是想要原始数据,也许想要推入NSUserDefaults或通过网络传输,它应该是这样的:

NSData *binaryData = [NSKeyedArchiver archivedDataWithRootObject:paths];
paths = [NSKeyedUnarchiver unarchiveObjectWithData:binaryData];

如果你在这些数组中有自定义类,你可能必须自己实现NSCoder,这很乏味,但并不困难。

此外,您可能需要小心可变数组和字典。我似乎记得有些可变对象在存档时变得不可变,所以你可能想在开始添加对象之前进行检查。

进一步阅读:

NSCoder Class Reference

Archives and Serializations Programming Guide