メモリ内で使用するモデル オブジェクトにカスタム ファイル形式をロードして解析するメカニズムを実装する方法について、一部の iOS Cocoa プログラマーからのガイダンスを探しています。この問題を解決するには多くの方法があるに違いないことは承知していますが、私が探求した現在の道の基本的な考え方と、行き詰まった場所を共有させてください。
しかし、最初に、コンテキストを示します。変更できない既存のファイル形式があるとします。これは基本的に、パイプで区切られたエキゾチックな形式で、さまざまなセクションに分かれており、それぞれが次のように始まります。
%n|sectionName
...そして、それに続く n 行はすべて、そのセクションに固有の方法でパイプで区切られています。一部のセクションにはパイプで区切られたヘッダー行があり、その後に n 行のデータ (これもパイプで区切られています) が続き、他のセクションにはパイプで区切られた n 行しかない場合があります。ファイルの先頭に向かっていくつかの短いセクションがあり、最後に k-ary ツリーのノードを説明する 1 つの巨大なセクションがあります: それらの親子関係と各ノードに関連付けられたデータです。これらのファイルのサイズは数十メガバイトで、将来的にはさらに大きくなる可能性があります。
最後に、私は iOS プログラミングにかなり慣れていないということです。
を使用NSFileHandle
して、ファイルの表現を のインスタンスとして取得することから始めましたNSData
。これは非常に簡単で、NSData
インターフェイスを調べてそこから先に進む方法を試してみると、NSCoding
プロトコルに気付きました。これは、オブジェクトを表現に (および表現から) アーカイブおよびシリアル化するための機能であると主張しています。
ファイル形式は、モデル オブジェクトをマーシャリングできる単なる表現であると考える傾向があるため、これは必要かもしれないと思いました。しかし、「Archives and Serializations Programming Guide」を掘り下げた後、私は自分自身を推測し始めました。この API は、私が達成しようとしていることに役立たないようです。
私はここで袋小路を下っていますか?代わりにサブクラス化しようとする必要がありNSInputStream
ますか、それとも私が見逃している他のアプローチを取る必要がありますか?