苹果在GLPaint例子上使用什么样的数据?

几个月前,我做了一个基于苹果GLPaint的应用程序。 它工作很好。

我已经logging了一些在屏幕上绘制简单graphics的点。 并将它们保存为点数组(转换为NSValue)。

我正在尝试改进我的应用程序,我再次看着苹果的例子。 他们的数据文件中的数据看起来像(我已经改变了一点点):

<data> AAC8QgAAsEMAAMJCAICoQwAAwkIBBAKRDAADCQgCAnUMAAMJCAACYQwAAwEIAgJRDAADA QgCAkkMAAMBCAACRQwAAwEIAgJBDAADAQgCAkEM= </data> <data> AACoQgAAnEMAALpCAACdQwAAxEIAAJ1DAAGGGgAAnUMAANpCAICdQwAA4kIAgJ5DAADs QgCAn0MAAOxCAICfQw== </data> 

所以每个小组都是一个图纸,这是我的CGPoint plists紧凑的方式。

我成功地将CGPoint数组转换为数据并将文件读回。

但是当我尝试打开每个形状数据文件我得到这个(在textMate,textEdit,xCode …):

其中一个CGPoints组数据文件 我想了解:

  1. 苹果用什么来获取CGPoints列表的压缩格式?
  2. 我怎样才能以更可读的方式打开我的数据文件?

该示例应用程序中的Apple的Recording.data文件中的数据是包含一堆NSData对象的NSArray的XML Plist表示,其中每个对象都包含表示CGPoint结构数组的字节。 请注意,这取决于CGFloat的二进制表示和CGPoint结构的特定布局,在同一个编译器的编译器或版本之间可能会有所不同。

你的屏幕截图看起来是NSKeyedArchiver的输出,它比较安全,但有更多的开销。

如果你想要一个紧凑的,但仍然可移植的表示,你可以手动序列化每个CGFloats到一个便携式格式的字节数组( 以前的问题可能会帮助你),然后在NSData中包装字节数组,将NSDatas放入一个NSArray,并使用writeToFile:atomically:将混乱输出到像苹果一样的plist。

这似乎是Base64 。 这个页面提到它:

请注意,数据字节在<data></data>标记之间以base-64编码。

<data>NSData ,你可以使用+[NSKeyedArchiver archivedDataWithRootObject:]从数组中获得。