2

「プロジェクト」の作成に使用できる Mac OS X アプリケーションを構築しています。ユーザーがプロジェクトを保存すると、画像ファイル、テキスト ファイル、sqlite ファイルなど、多くのリソースが保存されます。

プロジェクトごとに Documents 内にフォルダーを作成し、そのフォルダー内にすべてのプロジェクト アセットを配置して、プロジェクトを開くために使用する 1 つのプロジェクト ファイルを含めることができます。

使用したい NSBundle について読みました。しかし、私はそれらについてアプリケーション バンドルのコンテキストでしか読んだことがありません。この方法で NSBundle を使用することは可能ですか? ユーザーには単一のファイルのみが表示され、好きな場所に移動できます。

NSBundle を使用して、私が試みていることを行うのは理にかなっていますか? または、これを行う別の方法はありますか?

(私はMacOS Xプログラミングにかなり慣れていません)

アップデート

iPhoto はこのメソッドを使用して "iPhoto ライブラリ" を保存していると思います。これが私のアプリケーションでやりたいことです。NSBundle を調べる必要がありますか?

4

3 に答える 3

4

はい、それは可能であり、過去にかなりの数のアプリで使用されていました. この方法については、このドキュメントで説明しています。アプリの で明確に宣言されるとInfo.plist、Finder は結果のバンドルを 1 つのファイルとして表示します。

ただし、それを行うことはお勧めできません。Apple 自身の Keynote は、過去にバンドル アプローチを使用していましたが、現在は使用していません。同様に、OmniGraffle (長い歴史を持つ OS X の作図アプリ) はバンドルを使用してプロジェクトを保存していましたが、それもやめました。

その理由は、Finder ではバンドルがファイルとして表示されますが、Apple 以外の電子メール ソフトウェアやブラウザなどではバンドルが依然としてディレクトリとして認識されるためです。たとえば、ユーザーがブラウザー内の Gmail で作成している電子メールにバンドル形式でドキュメントを添付したい場合、混乱します。それは多くの人々を混乱させました。

したがって、可能ですが、お勧めしません。解決策の 1 つは、圧縮されたバンドルをユーザーに表示されるファイルとして使用し、ユーザーが一時ディレクトリを開いたときにそれを解凍することです。次にNSBundle、 and/or NSFileWrapperapis を使用して、その中のファイルにアクセスできます。

于 2011-01-27T08:57:06.913 に答える
2

Apple の File Wrapper サンプルは、あなたが望むもののようです: http://developer.apple.com/library/mac/#samplecode/PersistentDocumentFileWrappers/Introduction/Intro.html

また、Core Data 永続ストアをバンドルに保存する方法も示します。リソースを保存するだけの場合は、その部分を省略できます。

于 2011-01-27T08:58:25.257 に答える
0

NSBundleクラスはアプリケーション バンドルを表し、アプリケーション内のリソースにアクセスするために使用できますが、ユーザー データではなくアプリケーション データに対して使用します。

言及したリソースごとに、このタイプを保存する方法があります。たとえば、画像ファイルの場合はNSDataを使用して画像データをディスクに保存し、テキスト ファイルの場合はメソッドを使用できますwriteToFile:atomically:encoding:error:

ユーザーのデータを管理するための非常に優れたフレームワークであるCore Data ( http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/cdProgrammingGuide.html )を確認することをお勧めします。モデルを作成して、これがニーズに合うかどうかを確認してください。

于 2011-01-27T08:57:19.670 に答える