1

数ヶ月前、私はアップルのGLPaintをベースにしたアプリを作りました。それは素晴らしい働きをします。

画面に簡単な絵を描くポイントのセットを記録しました。そしてそれらをポイントの配列として保存しました(NSValueに変換されます)。

私は今自分のアプリを改善しようとしていますが、アップルの例をもう一度見ました。彼らのデータファイルのデータはそのように見えます(私はそれを少し変更しました):

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

つまり、すべてのグループが1つの図面であり、これはCGPointの私のplistよりもはるかにコンパクトです。

CGPointの配列をデータに変換し、ファイルを読み戻すことに成功しました。

しかし、各形状データファイルを開こうとすると、これが表示されます( textMate 、textEdit、xCode ...):

CGPointsグループデータファイルの1つ 私は理解したい:

  1. アップルは、CGPointsリストのこの圧縮形式を取得するために何を使用しますか?
  2. データファイルをより読みやすい方法で開くにはどうすればよいですか?
4

2 に答える 2

3

そのサンプルアプリケーションのAppleのRecording.dataファイルのデータは、一連のNSDataオブジェクトを含むNSArrayのXML Plist表現であり、各オブジェクトにはCGPoint構造体の配列を表すバイトが含まれています。これは、CGFloatのバイナリ表現とCGPoint構造体の特定のレイアウトに依存することに注意してください。これは、コンパイラー間または同じコンパイラーのバージョン間で異なる可能性があります。

スクリーンショットはNSKeyedArchiverの出力のようです。これはより安全ですが、オーバーヘッドがはるかに大きくなります。

コンパクトでありながらポータブルな表現が必要な場合は、個々のCGFloatをポータブル形式のバイト配列に手動でシリアル化して(この前の質問が役立つ場合があります)、バイト配列をNSDataでラップし、NSDataをNSArrayに配置します。writeToFile:atomically:Appleのように混乱をplistに出力するために使用します。

于 2011-07-15T14:08:47.990 に答える
1

これはBase64のようです。このページはそれについて言及しています:

データバイトは、タグ<data></data>タグの間でbase-64でエンコードされていることに注意してください。

<data>NSData、を使用して配列から取得できるためのものです+[NSKeyedArchiver archivedDataWithRootObject:]

于 2011-07-15T09:50:19.053 に答える