2011-01-17 4 views
4

私は、大量のテキスト(255文字以上)をCocoaに保存する最良の方法を知りたいと考えています。 Core Dataの大ファンであるため、私はそうする有効な方法があると思います。しかし、私は 'string'がこのタイプのものの間違ったデータ型であるように感じます。誰にもこれに関する情報はありますか?コアデータにBLOBのオプションが表示されないCore Dataに大量のテキストを保存する

+0

これはiOSまたはMac OS Xでですか? –

+0

まだNSStringを使ってみましたか? NSStringとCore Dataは、255文字をはるかに上回る文字列を扱うのに問題はありません。 – kubi

+0

@Joe Blow CoreデータはSQLiteによってサポートされています。コアデータは「データベースジョブ」である。 –

答えて

5

翻訳しなければならないバイナリとしてテキストを圧縮したり保存したりすることはできません。そうしないと、(テキスト保存されたバイナリコード化されたすべてのデータが)メモリに読み込まれ、変換/解凍され、次に検索される)。それ以外の場合は、コアデータストア内のテキストのみの表現をよりフル機能のものと併せてミラーリング(および維持)する必要があります。

ハイブリッドソリューションはどうですか?コアデータは実際のテキストを除くすべてを格納します。テキスト自体は、ファイルシステム上のコアデータのエントリごとに1ファイルずつアーカイブされます。各ファイルは、コアデータストア内の固有の識別子の名前が付けられています。このようにして、検索は2つのことを行うことができます(もちろんバックグラウンドで):タイトル、日付などのようなものをコアデータストアで検索します。コンテンツ検索のためにファイルを(おそらくSpotlightで)検索します。ファイル検索の一致がある場合、そのファイル名を使用して、アプリケーションのUIに表示するCore Dataの一致するレコードを検索します。

これにより、アプリケーション固有の内部検索条件のプログラムによる非同期検索を活用できます。これはもう少し作業ですが、たくさんのテキストについて話しているなら、私はより良い方法を考えることはできません。

+0

フィードバックのおかげでジョシュ!私はちょうど興味があります - ドキュメントは大量(KB - 数MB)バイナリの使用について説明していますので、それを使用するのは害でしょうか?検索や索引付けのためにCore Dataにデータを格納するほうが現実的です。 – Zakman411

+0

SQLiteストアで直接バイナリ情報内のテキストを検索することはできません。各 "レコード"(各エンティティのインスタンス)は、読み込まれ、デコードされますが(テキスト情報を取得するのに適切です)、次にメモリ内で検索される必要があります。非常に非効率的です。 –

+0

ボーナスとして、外部ファイルへのリンクアプローチは、1つの悪いバイトがあなたのドキュメント/データベース全体を覆うリスクを最小限に抑えます。大量の肉(テキスト)は、データベースが台無しになってもまだ安全です。 –

0

アップルのCore Data Programming Guide(特に「コアデータのパフォーマンス」セクション)を読むことをお勧めします。これは特にBLOB(「ラージ・データ・オブジェクト(BLOB)」の項を参照)と、あいまいなガイドラインを示しています。

2

BLOBデータ型は、コアデータで「バイナリデータ」と呼ばれます。 middaparkaが指摘したように、Core Data Programming Guideは、Core Dataでバイナリデータを扱う方法に関するガイダンスを提供しています。要件に応じて、BLOBを使用する代わりに、ディスク上のファイルへの参照を格納するだけです。

+0

"ディスク上の参照、DBでの参照"オプションについては触れていましたが、Core Dataは明らかに参照のみを削除するため、オブジェクトが削除されたときにオンディスクリソースが削除されることを手動で確認する必要があります。 –

+0

insert/save/delete ...メソッドに応答して、エンティティの基本的なNSManagedObjectサブクラスで簡単に処理します。私は、このアプローチを使用して、コアデータ+ SQLiteストアタイプによって管理されるiTunesのような中央データベースのSpotlight検索可能な「スタブ」を作成します。 –

関連する問題