2012-01-11 9 views
2

私のアプリケーションはいくつかのカスタムバンドルを読み込み、これらのバンドルにリソースを使いたいと思っています。Cocoa - 非メインバンドルのリソースをロードする

[NSBundle mainBundle] pathForResource:ofType:]のように、メインバンドルインスタンスからリソースを取得することは不可能です。

私はそれを+ [NSBundle pathForResource:ofType:inDirectory:]に置き換え、うまく動作します。しかし、リソースをロードするコードでは、 "inDirectory:"のバンドルパスを知っていることは非常に不便です。バンドルが別のパスに移動されても機能しません。

これを解決する他の方法はありますか?ありがとうございました!

答えて

1

あなたが達成しようとしていることは完全にはわかりませんが、バンドルへの直接パスを使用せずにバンドルリソースをロードする場合は、[NSBundle bundleForClass:]または[NSBundle bundleWithIdentifier:]のいずれかを使用できます。あなたが欲しいのバンドルのインスタンスへの参照を持っていたら、次のように、あなたがその内容にアクセスすることができます

NSBundle myBundle = [NSBundle bundleWithIdentifier:@"com.my.identifier"]; 
[myBundle pathForResource:@"myResource" ofType:@"type"]; 

あなたはまだバンドルが移動した後でさえも正確にしたい場合は、それがトリッキー質問かもしれません。ドキュメントでは、「NSBundleオブジェクトはファイルシステム内の場所を表しています...」と述べています。その場所が移動すると、バンドルインスタンスは引き続き既存の場所を検索します。バンドルが移動されたかどうかを判断し、NSBundleインスタンスを新しい場所から再作成する別のメカニズムを見つけ出す必要があると思います。

+0

これはまさに私が欲しいものです!私はバンドルがID自体を持っていることを忘れていた.. – notgeek

関連する問題