0

I'll try to explain my self, I have ContactsViewController that shows a table view with a list of contacts (the model is an array of Contact objects), each cell display an image of a contact.

Currently what I do to populate the cell's UIImageView is this:
1. I override the Contact image property getter -

- (UIImage *)contactImage
 {
     if (!_contactImage) {
        _contactImage = [[UIImage imageNamed:@"placeHolder.png"] retain];
       [self asyncDownloadContactImageFromServer];
     }
     return _contactImage;
 }
  1. Then when I finish downloading the image I set it to the contactImage property and I post a ContactUpdatedImageNotification.

  2. My ContactsViewController then get this notification and reload the cell of this contact, this will set the downloaded image to the cell's imageView.

The result of this is good async fetching of the images without blocking the UI while the user scroll the table view.
BUT there is something small that bothers me, when the a user scroll the table view and reveal new cells the new cell's image get download as expected but the cell's imageView is not updated with the new downloaded image till the user pick up his finger.
I supposed that I need to do something in another thread to make this effect, but I don't know how?

4

2 に答える 2

1

デフォルトの実行ループでコードが実行されているため、ユーザーがスクロールを停止するまで画像は更新されず、スクロールが完了するまで遅延します。この他の質問は、ランループ、 NSDefaultRunLoopMode と NSRunLoopCommonModesの違いを扱っており、注意しないとスクロール自体にぎくしゃくする可能性があるため、スクロール中に画像を更新しないことを正確に推奨しています。

また、これらのランループ モードの存在を知ったので、xcode のドキュメントまたはインターネットでそれらに関するより多くの情報を見つけることができます。

于 2012-04-15T12:47:11.920 に答える
0

Hey Eyal は次の URL にアクセスしてください...回答とサンプル コードが表示されます...

異なる画像を持つ異なるセルを持つテーブルビュー

これがあなたを助けることを願っています...

于 2012-04-15T11:13:54.503 に答える