苹果在GLPaint例子上使用什么样的数据?
几个月前,我做了一个基于苹果GLPaint的应用程序。 它工作很好。
我已经logging了一些在屏幕上绘制简单graphics的点。 并将它们保存为点数组(转换为NSValue)。
我正在尝试改进我的应用程序,我再次看着苹果的例子。 他们的数据文件中的数据看起来像(我已经改变了一点点):
<data> AAC8QgAAsEMAAMJCAICoQwAAwkIBBAKRDAADCQgCAnUMAAMJCAACYQwAAwEIAgJRDAADA QgCAkkMAAMBCAACRQwAAwEIAgJBDAADAQgCAkEM= </data> <data> AACoQgAAnEMAALpCAACdQwAAxEIAAJ1DAAGGGgAAnUMAANpCAICdQwAA4kIAgJ5DAADs QgCAn0MAAOxCAICfQw== </data>
所以每个小组都是一个图纸,这是我的CGPoint plists紧凑的方式。
我成功地将CGPoint数组转换为数据并将文件读回。
但是当我尝试打开每个形状数据文件我得到这个(在textMate,textEdit,xCode …):
我想了解:
- 苹果用什么来获取CGPoints列表的压缩格式?
- 我怎样才能以更可读的方式打开我的数据文件?
该示例应用程序中的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:]
从数组中获得。