2011-12-31 7 views
0

I 4枚の写真が含まれていると私は、Webからこれらの写真を取得するが、私はこれらの写真は enter image description hereダウンロードした写真を保存するにはどうしたらいいですか?

再度ダウンロードされているのUITableViewを下にスクロールするときに問題があり、これはコードでのUITableViewCellあります

 ITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellPhoto"]; 

if (cell == nil) { 

    NSArray *nibObject = [[NSBundle mainBundle] loadNibNamed:@"CustomCellThumbnails" owner:self options:nil]; 
    cell = [nibObject objectAtIndex:0]; 
} 

// Get the photos 
int getPhotos = indexPath.row * 4; 

for (int i = 1; i <= 4; i++) { 

    if (getPhotos < [imageArray count]) 
    { 
     UIButton *imageButton = (UIButton*)[cell viewWithTag:i]; 
     NSString *url = [imageArray objectAtIndex:getPhotos]; 

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.siteweb.com%@",url]]]; 
      UIImage *imageFieldProfile = [[UIImage alloc] initWithData:imageData]; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       // Set the phoyo to the UIButton 
       [imageButton setBackgroundImage:imageFieldProfile forState:UIControlStateNormal]; 
       [imageFieldProfile release]; 
       // Set the corner of UIButton 
       [imageButton.layer setCornerRadius:5.0]; 
       [imageButton.layer setMasksToBounds:YES]; 
       imageButton.tag = getPhotos; 
      }); 
     }); 

     [imageButton addTarget:self action:@selector(displayPhoto:) forControlEvents:UIControlEventTouchUpInside]; 

    }   
    getPhotos ++; 
} 

答えて

1

UITableViewCellではなく、セルを塗りつぶすためにビューコントローラを使用する必要があります。これを行うと、コーディングスタイルが優れているだけでなく、データを保存する方が簡単です。あなたがダウンロードしたデータを保存することができるように、ストレージテーブルのいくつかの種類とのUITableViewCellを初期化します:あなたが本当にしなければならない場合

とにかく、再び、initWithStyle:reuseIdentifier:usingCacheTable:

initWithStyle:reuseIdentifier:を書き換えしかし、これを行うには正しい方法ですView Controllerにデータをロードし、サブクラスには単に物事を表示させるだけです。

+0

しかし、私はnibファイルでカスタムUITableViewCellを持っていますが、どうすればinitWithStyleでUITableViewCellを作成できますか:reuseIdentifier:usingCacheTable: –

+0

いいえ考えてみましょう - プロパティとして追加し、 '[cell setMyCache:]'を代わりに使うことを検討してください。 –

0

イメージをダウンロードするときは、テーブルビューのセルではなく、別のオブジェクトに保存またはキャッシュする必要があります。おそらく、テーブルビューセルが直接URLリクエストを行うのではなく、テーブルビューセルが画像を要求する何らかの種類のデータソースまたはモデルオブジェクトを使用しています。次に、モデルオブジェクトは、ダウンロードした後、そしてそれらをセルに渡す前に、画像をキャッシュすることができます。

0

ローカルキャッシュと組み合わせてレイジーローディングイメージビューの組み合わせを使用できます。これは、ASIHTTPRequestと正しくセットアップされたキャッシングフラグを組み合わせて使用​​すると、やりやすくなります。

ASIHTTPRequestは非常に使いやすく、キャッシングは非常にうまく制御できます。

提案されている他のソリューションとは対照的に、UITableViewとそのUITableViewCellsを使用すると、このようなロジックを自分で構築することなく、デ/キューに入れられたセルを使用できるようになります。

私は主要なニュースマガジンアプリ(2mio以上のダウンロード)にこのようなソリューションを使用しており、結果に完全に満足しています。

関連する問題