0

下部で更新

このために、MKNetworkKitFlickrデモから分岐しました。テーブルに表示したいWebサーバー上にいくつかの画像があります。UITableViewCellサブクラスImageCellがあります。

リモート画像を取得するためのカスタムメソッドは次のとおりです。

-(void)setImageForCell:(NSString *)remoteFileName {

    self.loadingImageURLString =
    [NSString stringWithFormat:@"http://myserver.com/%@.png",remoteFileName];
    self.imageLoadingOperation = [ApplicationDelegate.imageDownloader imageAtURL:[NSURL URLWithString:self.loadingImageURLString]
                            onCompletion:^(UIImage *fetchedImage, NSURL *url, BOOL isInCache) {

                                if([self.loadingImageURLString isEqualToString:[url absoluteString]]) {

                                    if (isInCache) {
                                        self.imageView.image = fetchedImage;
                                        [self.contentView drawRect:self.contentView.frame];
                                        NSLog(@"Image is in cache");
                                    } else {
                                        self.imageView.image = fetchedImage;
                                        [self.contentView drawRect:self.contentView.frame];
                                        NSLog(@"Image is not in cache");
                                    }
                                }
                            }];   
}
    //TableView.h
    //it is called like this
   //in cellForRowAtIndexPath...
   ImageCell *cell = (ImageCell *)[tableView dequeue...etc];
 MyObject *obj = [dataSource objectAtIndex:indexPath.row];
 cell.textLabel.text = obj.name;
 [cell setImageForCell:obj.name];
 return cell;

デフォルトのキャッシュディレクトリの内容を調べたところ、中にアイテムがあります。テーブルを常にスクロールすると、「画像はキャッシュにあります」と表示されるようになりました。問題は、セルのimageViewが更新されないことです。Mugunthには自動的にクラスメソッドNotizesObserversForKeyがあります:しかし、私はそれがどこにも実装されているのを見たことがありません。その行を新しいコンテンツで更新するようにtableViewインスタンスに指示するための別の手順が含まれていると思います。

ご入力いただきありがとうございます。

アップデート

CellとUIImageViewIBOutletを備えたカスタムInterfaceBuilderxibファイルを使用してこれを機能させました。なぜself.imageView.imageで機能しなかったのかわからないので、その理由を正確に調べたいと思います。標準のUITableViewCellクラスを使用したいので、これは未解決の質問だと思います。

4

2 に答える 2

3

prepareForReuse の呼び出しです。self.imageView.image を nil に設定していますか? はいの場合は、再初期化されていないように見えるため、実行しないでください。

于 2012-11-09T02:06:46.570 に答える
1

コードから「drawRect」を呼び出すのはなぜですか。それは冒涜です!imageView を検査し、IB 接続が良好かどうかを確認します。

于 2012-08-13T02:37:15.500 に答える