苹果在GLPaint示例中使用了什么样的数据?

时间:2011-07-10 15:54:20

标签: ios nsdata cgpoint

几个月前,我制作了一款基于Apple GLPaint的应用程序。 它很棒。

我已经记录了在屏幕上绘制简单绘图的点集。并将它们保存为点数组(转换为NSValue)。

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

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

因此,每个组都是一个绘图,这比CGPoints的plist紧凑。

我已经成功将CGPoints数组转换为数据并重新读取文件。

BUT 当我尝试打开每个形状数据文件时,我得到了这个(在textMate,textEdit,xCode ......上):

one of the CGPoints groups data file 我希望了解:

  1. Apple使用什么来获取CGPoints列表的压缩格式?
  2. 如何以更易读的方式打开我的数据文件?

2 个答案:

答案 0 :(得分:3)

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

您的屏幕截图似乎是NSKeyedArchiver的输出,它更安全,但开销更大。

如果你想要一个紧凑但仍然可移植的表示,你可以手动将单个CGFloats序列化为一个可移植格式的字节数组(this previous question可以帮助你),然后将字节数组包装在NSData中,放入NSDatas进入NSArray,并使用writeToFile:atomically:将混乱输出到像Apple那样的plist。

答案 1 :(得分:1)

这似乎是Base64This page提到它:

  

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

<data>适用于NSData,您可以使用+[NSKeyedArchiver archivedDataWithRootObject:]从数组中获取。{/ p>