几个月前,我基于苹果GLPaint开发了一个应用程序。
效果很好。
我记录了在屏幕上绘制简单图纸的点集。并将它们保存为点数组(转换为NSValue)。
我现在正在尝试改进我的应用程序,我再次查看了苹果示例。
他们的数据文件中的数据看起来像这样(我做了一点改动):
<data>
AAC8QgAAsEMAAMJCAICoQwAAwkIBBAKRDAADCQgCAnUMAAMJCAACYQwAAwEIAgJRDAADA
QgCAkkMAAMBCAACRQwAAwEIAgJBDAADAQgCAkEM=
</data>
<data>
AACoQgAAnEMAALpCAACdQwAAxEIAAJ1DAAGGGgAAnUMAANpCAICdQwAA4kIAgJ5DAADs
QgCAn0MAAOxCAICfQw==
</data>
所以每一组都是一张图纸,这比我的CGPoints紧凑者紧凑。
我已经成功地将CGPoints数组转换为数据并读回了文件。
但
当我尝试打开每个形状数据文件时,都会收到此消息(在textMate,textEdit,xCode ...上):
我想了解:
最佳答案
Apple的sample application中的Recording.data
文件中的数据是NSArray的XML Plist表示形式,其中包含一堆NSData对象,每个对象均包含表示CGPoint结构数组的字节。请注意,这取决于CGFloat的二进制表示形式和CGPoint结构的特定布局,这在编译器或同一编译器的版本之间可能有所不同。
您的屏幕快照似乎是NSKeyedArchiver的输出,它更安全,但开销却更大。
如果您想要一个紧凑但仍可移植的表示形式,则可以将各个CGFloats手动序列化为可移植格式的字节数组(this previous question可能会帮助您),然后将字节数组包装在NSData中,将NSDatas放入NSArray中,然后使用writeToFile:atomically:
像Apple一样将混乱输出到plist。
关于ios - 苹果在GLPaint示例中使用哪种数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6642067/