0

3つのアレイがあり、これらすべてのアレイを1つのアレイにコピーしました。これら3つの配列はすべて辞書の配列です。すべての配列にはpictureというフィールドがありますが、その画像は異なるソースからのものです。1つの配列のURL、他の配列のデータ、3番目の配列のファイルです。

たとえば、Array1には、キーが付いた辞書があります-画像とそのロード元NSURL。同様に、Array2とArray3には、同じキー名(picture)とからロードされた辞書がContentofFilesありNSDataます。

ここで、テーブルビューにデータを入力したいと思います。もちろん、Custom UITableViewCellコンテンツビューとして画像ビューがあります。その画像をロードするには、どうすればよいですか。

私はこのことをしていました。

NSURL *url  = [NSURL URLWithString:[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"]];
cell.contactImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];

しかし、cell.contactImageView.imageNSURLから画像を受け取らないと、これはクラッシュします。では、どうすればよいですか?どんな助けでも、感謝されます

だが、

4

4 に答える 4

3

受信した画像がnullかどうかを確認し、nullの場合は、プロフィール写真が選択されていないときにFacebookの写真のようにnophotoというテンプレート写真画像を設定するだけです。

    UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
    if (img)
       cell.contactImageView.image = img;
    else
       cell.contactImageView.image = [UIImage imageNamed:@"no_photo.png"];
于 2012-06-07T06:49:41.627 に答える
1

これらの画像がネットから取得された場合は、を使用しないことをお勧めし[NSData dataWithContentsOfURL:]ます。

画像を非同期でロードするノンブロッキング方式を使用する必要があります。テーブル内の多数の行でこのメソッドを使用すると、パフォーマンスの問題が発生します。

これが私の推奨事項です。SDWebImageライブラリを使用してください。使いやすく、インストールもさらに簡単です。

ライブラリをプロジェクトに追加したら#importUIImageView+WebCache.hクラスの使用例を以下に示します。

 [cell.contactImageView.image setImageWithURL:[NSURL URLWithString:[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"]]
               placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
于 2012-06-07T07:12:38.863 に答える
0

クイック返信、特に@skramをありがとうございました。あなたの提案により、私のテーブルビューのパフォーマンスが大幅に向上しました。私が尋ねた質問、私が考えたより良い答えは使用することiskindofClassです。画像がいずれかのクラスからのものである場合、条件付きで、その画像がどこから来たのかを確認し、それに応じて画像を入力できます。

if ([[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"] isKindOfClass:[UIImage class]]) 
    {
        cell.contactImageView.image = [[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"];
    }
    else if ([[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"] isKindOfClass:[NSString class]]) 
    {
        cell.contactImageView.image = [[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"];
    }
    else if([[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"] isKindOfClass:[NSURL class]])
    {
        [cell.contactImageView setImageWithURL:[NSURL URLWithString:[[contactList objectAtIndex:indexPath.row] objectForKey:@"picture"]]placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
    }

これで、テーブルビューに適切にデータを入力できるようになりました。もう一度、に感謝しますscram

于 2012-06-07T08:34:57.613 に答える
0

さまざまなソースからの画像を提供する場合は、写真を撮影する場所を指定するキーを辞書にもう1つ追加できます。したがって、cell.contactImageViewに画像を提供できます。

于 2012-06-07T06:53:25.327 に答える