0

こんにちは、セルをカスタマイズするために作成した CustomTableViewCell 内で EGOImageView を使用しようとしています。これは、EGOImageView を使用したコードです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString* simpleTableIdentifier = @"Albums";

CustomTableCell* cell = (CustomTableCell*)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (!cell)
{
   cell = [[CustomTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];

    NSLog(@"Show once or more times");
}

NSDictionary* dictionary = (NSDictionary*)[self.albumCollection objectAtIndex:indexPath.row];

cell.label.text = [dictionary valueForKey:@"name"];

EGOImageView* imageView = [[EGOImageView alloc] initWithPlaceholderImage:[UIImage imageWithContentsOfFile:@""]];
[imageView setImageURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=small&access_token=%@", (NSString*)[dictionary valueForKey:@"id"], [[FBSession activeSession] accessToken]]]];
[imageView setFrame:CGRectMake(0.0f,0.0f,78.0f,78.0f )];


[cell.iView addSubview:imageView];
[imageView release];

同じ画像をロードする各セルの画像。画像の読み込み中にセルを再利用したためでしょうか。

問題が発生した理由が思いつかない問題を見つけました。グラフ API を使用して画像https://graph.facebook.com/%@/picture?type=small&access_token=%@を取得しました。最初のパラメーターはアルバム ID でした。

問題を簡単に確認できるようにするために、同じ写真を使用したアルバムに関係なく、セルで 1 つのアルバムのみを使用しました。しかし、リンクをブラウザにコピーすると、実際の写真の URL がアドレス バーに表示され、画像が表示され、正しい写真が表示されました。

誰が何が間違っていたのか知​​っていますか。

4

1 に答える 1

0

これが例です。バックグラウンドでサーバーからユーザーの写真を読み込み、セルの画像を更新します。最初に imageView.image が nil に設定されていることに注意してください。これは、セルの再利用の場合のドームであるため、ダウンロード中に間違った画像が表示されるのではなく、画像が表示されなくなります。

追加するもう1つのことは、常に画像をダウンロードしないようにキャッシュを持つことも良いことです. もう 1 つの良い点は、エッジ ネットワークで画像をダウンロードしないことです。

- (UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"TransactionCell";
        NSMutableArray *data = searching ? searchResult : dataSource;
        NSDictionary *object = [data objectAtIndex:[indexPath row]];

        UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
                cell = [[[UITableViewCell alloc] initWithIdentifier:CellIdentifier] autorelease];
        }
        cell.imageView.image = nil;
        cell.textLabel.text = @"Your cell text";
        NSString *contact = @"foo@gmail.com";
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                        NSData *imgData = [appDelegate addUserPic:contact];
                        if (imgData == nil && netStatus == ReachableViaWiFi) {
                                NSString *url = [NSString stringWithFormat:@"http://somehost.com/userpic/%@", contact];
                                imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
                        }
                        dispatch_async(dispatch_get_main_queue(), ^{
                                UITableViewCell *updateCell = [self.tableView cellForRowAtIndexPath:indexPath];
                                if (updateCell) {
                                        if (imgData) {
                                                [appDelegate setUserPic:contact imgData:imgData];
                                                updateCell.imageView.image = [UIImage imageWithData:imgData];
                                        } else {
                                                updateCell.imageView.image = nil;
                                        }
                                        /* This forces the cell to show image as now
                                           it has normal bounds */
                                        [updateCell setNeedsLayout];
                                }
                        });
                });
        return cell;
}
于 2013-01-23T08:17:38.837 に答える