1

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

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

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

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

所以每组都是一张图,这比我的 CGPoints plists 紧凑得多。

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

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

CGPoints 组数据文件之一 我想明白:

  1. 苹果用什么来获得这种压缩格式的 CGPoints 列表?
  2. 如何以更具可读性的方式打开我的数据文件?
4

2 回答 2

3

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

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

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

于 2011-07-15T14:08:47.990 回答
1

这似乎是Base64此页面提到它:

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

<data>是 for NSData,您可以使用 . 从数组中获取+[NSKeyedArchiver archivedDataWithRootObject:]

于 2011-07-15T09:50:19.053 回答