1

フォルダーに顧客の画像 ([code].png という名前) がたくさんありますが、画像を持っていない顧客もいるので、プレースホルダーを表示したいと思います。

画像 [code].png の存在を確認しています。存在する場合はそれを表示し、存在しない場合はプレースホルダーを表示します。ただし、ファイルが存在する場合でも、fileExistsAtPathは常にfalse を返します。

NSFileManager *m    = [NSFileManager defaultManager];
NSString *imagePath = [NSString stringWithFormat:@"%@.png",code];
if ([m fileExistsAtPath:imagePath])
    self.detailViewController.imageFrame.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@.png",code]];
else
    self.detailViewController.imageFrame.image = [UIImage imageNamed:@"customer_large.png"];

これは常に customer_large を表示します。

ただし、imagePath を画像への絶対パスに変更し、表示される画像を相対ファイル名のままにしておくと、ブール値は正しく機能し、表示される画像も機能します

これは、画像が表示されるように、チェックしているファイル名が存在することを証明しますが、プログラムがファイルの存在を証明したときに false を返すため、 fileExistsAtPath に関して明らかに何かが欠けています。

4

3 に答える 3

1

画像はドキュメントディレクトリではなくプロジェクトに保存されるため、NSFileManagerはまったく使用しません。

代わりに、[UIImage imageNamed:@ "IMAGE_FILENAME"]を使用して、nilが返されるかどうかを確認してください。含まれている場合は、プレースホルダーを使用します。

コードスニペットは次のとおりです。

UIImage *possibleImage = [UIImage imageNamed:@"IMAGE_FILENAME"];
if (possibleImage) {
   self.detailViewController.imageFrame.image = possibleImage;
} else {
   self.detailViewController.imageFrame.image = [UIImage imageNamed:@"customer_large.png"];
}
于 2012-10-26T15:43:42.623 に答える
0

現状でimagePathは、実際には画像の名前にすぎません。これを試してみてください:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:code ofType:@"png"];
于 2012-10-26T15:43:52.803 に答える
0

あなたのファイルはドキュメントディレクトリに保存されていると思いますか?? その場合は、最初に次の方法でドキュメント ディレクトリへのパスを取得します。

NSString *destPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    destPath = [destPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",nameOfImage]];

これは、そのファイルが存在するかどうかを確認します。これが役立つことを願っています:D

于 2012-10-26T15:42:19.443 に答える