我有一个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];
问题:如何序列化/反序列化此对象?
答案 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
,这很乏味,但并不困难。
此外,您可能需要小心可变数组和字典。我似乎记得有些可变对象在存档时变得不可变,所以你可能想在开始添加对象之前进行检查。
进一步阅读: