2012-01-25 8 views
4

私は、データベースファイルを操作するMac Cocoaアプリケーションを作成しています。これは、NSDocument技術を使用して簡単に実装できます。これらのファイルは、直接ディスクファイルに関連しています。ほとんどのアプリ 'ドキュメント'がファイルベースでない場合、NSDocumentは正しい選択ですか?

しかし、アプリの大半はこのデータベース内のアイテムを操作します。ユーザーがデータベース項目を開くと、アイテムを表示、編集、保存できるようにする新しいウィンドウが表示され、データベース項目はディスクファイルに直接関係しません。ここで、取り消しとやり直しが適切であることに注意してください。

NSDocumentテクノロジをデータベースウィンドウとデータベースアイテムウィンドウの両方に使用するのが適切ですか、それとも良い方法がありますか?

答えて

3

私はNSDocumentを使用すると良い選択になると思います。 NSDocumentController、元に戻すサポート、ウィンドウ管理など、提供されている機能のほとんどを利用できます。読み込みや保存などのいくつかのメソッドをオーバーライドする必要があります。これらのドキュメントで正しく動作するようにするには、「最近使ったファイル」メニューを使用するのが難しいかもしれません(カスタムURLスキームを使用しているかもしれません)。 NSDocumentを使用することの短所は...私が考えることはできません。すべてをゼロから書く必要があり、アプリケーションの残りの部分にそれらを統合することはさらに難しくなります。

+0

多くのありがとうございます - そのように見えます:)カスタムURLスキームを詳しく教えてください。あなたは、データベース項目を一意に識別する方法を指しています。そのため、「データベース項目文書クラス」が開こうとすると選択されますか? – trojanfoe

+0

正確に。カスタムスキームを定義し、アプリケーションがそれをサポートしていることを示します。 URLには、データベース自体のパスまたはURL、およびそれが参照するデータベースの項目を決定するいくつかの識別子が含まれます。次に、そのスキームを使用してドキュメントのURLを設定することができます。これにより、「最近開いた」メニューのようにアイテムを直接開くことができます。 – ughoavgfhw

+0

偉大な - 一意の*データベース項目*識別子を思いついても問題はありません。再度、感謝します。 – trojanfoe

1

NSDocumentに基づいてアプリケーションを作成しました。実際にはNSPersistentDocumentというオブジェクトデータを格納するためのコアデータサービスにアクセスできるようになっています。それは私のために素晴らしい仕事をしたが、私は不利な点は見つけなかった。

で作業することを検討するときは、文書のインスタンスをビュー/ウィンドウとその関連データを管理するために構築するさまざまなコントローラに渡すためのメカニズムを用意する必要があります。私はNSPersistentDocumentのインスタンスへの参照を保持できる汎用View Controllerクラスを作成してこれを実装しました。すべてのビューコントローラはこの汎用コントローラのサブクラスであり、Core Dataサービスに簡単にアクセスできます。

私のアプリは、エンティティごとにボリュームが異なる15個のコアデータエンティティを数百から数十万のインスタンスまで管理します。元の質問の一部ではありませんが、オブジェクトの永続性のためにコアデータを使用することを検討することもできます。私はアプリケーションを構築する間にリアルタイム保護されていることがわかりました(PHP、Java、および一般的に生産性にはあまり寄与しないさまざまなDBレイヤーでこれまでに働いていました)。

+0

多くの感謝 - コアデータは私が恐れているオプションではありません - データベース(およびそのアイテム)を読み書きするコードは既にC++の静的ライブラリに実装されており、それを使用する必要があります。 – trojanfoe

関連する問題