我有一個(gè)TableView的界面,是一個(gè)列表頁(yè),只有一個(gè)Section,每一個(gè)Cell里都有一張圖片是從服務(wù)器異步加載的。我用ASIHttpRequest去加載圖片,在每個(gè)Request里已經(jīng)通過(guò)UserInfo帶上了這個(gè)Cell的NSIndexPath.row,然后回調(diào)的時(shí)候,就按照這個(gè)NSIndexPath去更新Cell的默認(rèn)占位圖片。但是,我發(fā)現(xiàn)刷兩下以后,Cell里的圖片又亂掉了。貌似我NSIndexPath.row沒用一樣的,有沒有人也遇到過(guò)一樣的問題啊。完整代碼太復(fù)雜,把涉及到網(wǎng)絡(luò)的代碼貼一下-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{// ...
[self loadImageWithURL:[self.dataSource objectAtIndex:indexPath.row]
index:indexPath.row]; // 這是我自己定義的一個(gè)方法// ...}
- (void)loadImageWithURL:(NSString *)aURL index:(NSInteger)anIndex {
ASIHTTPRequest *asiRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:aURL]];
asiRequest.delegate = self;
asiRequest.userInfo = [NSDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithFormat:@"%d", anIndex], @"index", nil];
asiRequest.requestMethod = @"GET";
[asiRequest startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest*)request { NSInteger index = [[request.userInfo objectForKey:@"index"] intValue]; UITableViewCell *cell = [tableView cellForRowAtIndexPath:
[NSIndexPath indexPathForRow:index
inSection:0]];
cell.imageView.image = [UIImage imageWithData:request.responseData];}
2 回答

精慕HU
TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
UITableView 對(duì) cell 會(huì)有重用機(jī)制,以保證較少的內(nèi)存使用。而帶來(lái)的問題是,如果代碼寫得不仔細(xì),可能會(huì)導(dǎo)致某行 cell 的內(nèi)容出現(xiàn)在另一行。
把 cellForRowAtIndexPath 的完整代碼貼出來(lái)吧。

慕桂英3389331
TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
這個(gè)問題我曾經(jīng)也遇到過(guò),我的解決方案是:在每一個(gè)ImageView的對(duì)象中記錄該圖片的URL,當(dāng)異步請(qǐng)求回調(diào),要展示圖片的時(shí)候,先檢查URL是否一致,如果不一致,就先把請(qǐng)求下來(lái)的圖片丟進(jìn)緩存。
- 2 回答
- 0 關(guān)注
- 179 瀏覽
添加回答
舉報(bào)
0/150
提交
取消