2011-07-10 17 views
1

幾個月前我做了一個基於蘋果GLPaint的應用程序。 它很好用。蘋果在GLPaint例子上使用什麼樣的數據?

我記錄了在屏幕上繪製簡單圖形的點集。並將它們保存爲點數組(轉換爲NSValue)。

我想改善我的應用程序,我再次看着蘋果的例子。 在數據文件中的數據看起來像這樣(我已經改變了它一點點):

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

所以每個組是一個圖形,這是遠遠緊湊然後我CGPoints的Plist檔案。

我已成功將CGPoint數組轉換爲數據並將文件讀回。

當我嘗試打開每個形狀的數據文件,我得到這個(現在TextMate,文字編輯,Xcode中...):

one of the CGPoints groups data file 我想了解:

  1. 什麼蘋果公司是否使用這種壓縮格式的CGPoints列表?
  2. 如何以更可讀的方式打開我的數據文件?

回答

3

sample application中的Apple Recording.data文件中的數據是包含一堆NSData對象的NSArray的XML Plist表示,其中每個NSData對象都包含表示CGPoint結構數組的字節。請注意,這取決於CGFloat的二進制表示和CGPoint結構的特定佈局,這可能在編譯器或同一編譯器的版本之間有所不同。

你的屏幕截圖看起來是NSKeyedArchiver的輸出,它比較安全,但有更多的開銷。

如果你想要一個緊湊但仍然便攜的表示,你可以手動將單個CGFloats串行化成一個可移植格式的字節數組(this previous question可能會幫助你),然後將字節數組包裝在NSData中,將NSDatas放入一個NSArray,並使用writeToFile:atomically:將混亂輸出到像蘋果一樣的plist。