私はiOS開発に不慣れであり、これは私がここにたくさん来るにもかかわらず、stackoverflowに関する私の最初の質問です。このような素晴らしいリソースをありがとう!
スタンフォードCS193Pコースを受講していて、「割り当て5追加クレジット1」で問題が発生しています。
タイトル、サブタイトル、サムネイルを表示するUITableViewがあります。サムネイルフェッチをキューに入れましたが、サムネイル画像が戻ってきたときにテーブルセルがリサイクルされていないことを確認する必要があります。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Photo";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSDictionary *imageDescription = [self.photoList objectAtIndex:indexPath.row];
NSString *expectedPhotoID = [imageDescription objectForKey:FLICKR_PHOTO_ID];
// Configure the cell...
cell.imageView.image = [UIImage imageNamed:@"placeholder.png"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *imageThumb = [self imageForCell:imageDescription];
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]]; // simulate 2 sec latency
dispatch_async(dispatch_get_main_queue(), ^{
NSString *photoID = [imageDescription objectForKey:FLICKR_PHOTO_ID];
if ([expectedPhotoID isEqualToString:photoID]) {
cell.imageView.image = imageThumb;
} else {
NSLog(@"cellForRowAtIndexPath: Got image for recycled cell");
}
});
});
return cell;
}
このコードでは、photoID
常にに一致しexpectedPhotoID
ます。imageDescription
これは、作成時に両方のキューにポインターが使用されているためだと思います。[self.photoList objectAtIndex:indexPath.row]
(の代わりに)直接使用してみましimageDescription
たが、どちらも機能しませんでした。キューが作成された時点でも解決されているようです。
私はここでいくつかの基本的な理解を欠いています、そしてあなたの助けに感謝します。