質問

私のiphoneアプリでは、目的のcファイルと画像を含む静的ライブラリにリンクしています。静的ライブラリから画像をロードすることは可能ですか?試しました

[UIImage imageNamed:[[NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"]];

しかし、明らかにイメージはメインバンドルにはなく、静的ライブラリにあり、NSBundleクラスはメインバンドルと既知のパスを持つバンドルにのみアクセスできるようです。 iPhoneの静的ライブラリから画像をロードする方法はありますか?

役に立ちましたか?

解決

「静的ライブラリの画像は[...]です」とはどういう意味かは明確ではありません。静的ライブラリはプレーンファイル(拡張子.a)であり、アーカイブされたオブジェクトファイルが含まれています。一方、バンドルはディレクトリ階層です(実行可能ファイルやその他のリソースを含む)。

静的ライブラリをリンクすると、ライブラリのコードが実行可能ファイルに直接含まれます。ファイルはアプリケーションバンドルにコピーされないため、イメージをコピーする方法はありません。

静的ライブラリのある画像ファイルがある場合は、Xcodeでターゲットにコピーファイルビルドフェーズを追加することで、アプリケーションバンドルに単純にコピーできます。

他のヒント

最も簡単な方法は、画像をインライン文字配列に保存することです:

const char imageData[] = { 0x00, 0x01, 0xFF, ... };

そして後で必要になったとき:

UIImage *image = [UIImage imageWithData:[NSData dataWithBytesNoCopy:imageData length:sizeof(imageData) freeWhenDone:NO]];

画像のバイナリデータ(PNGまたはJPEGとして保存した後)を手動で文字配列に変換する必要があります(または、そのためのスクリプトを記述します)

静的ライブラリコピーファイルのビルドフェーズで絶対パスを使用し、クライアントアプリケーションを指すようにしますか?このようなことを試しても、画像にアクセスできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top