0

何か面白いことが起こっています。テーブルビューは、APIを介してflickrの写真を読み込みます。ビューをロードすると、名前とphotoURL配列が作成されます。次に、cFRAIP tableviewメソッドで、それらを使用してセルの値を設定します。

私はGCDで遊んでみることにし、これで終わりました:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell Identifier"] autorelease];

cell.textLabel.text = [photoNames objectAtIndex:indexPath.row];


dispatch_async(kfetchQueue, ^{
    NSData *imageData = [NSData dataWithContentsOfURL:[photoURLs objectAtIndex:indexPath.row]];
    cell.imageView.image = [UIImage imageWithData:imageData];

});



return cell;}

しかし、私が得たのは、写真のない各セルの写真名を含むテーブルビューです。写真は、セルをタップしたときにのみ読み込まれます。なぜこうなった?

4

2 に答える 2

2

アプリケーションのユーザー インターフェイスの操作は、メイン スレッドで行う必要があります。

dispatch_async(kfetchQueue, ^{
    NSData *imageData = [NSData dataWithContentsOfURL:[photoURLs objectAtIndex:indexPath.row]];
    dispatch_async(dispatch_get_main_queue(), ^{
        cell.imageView.image = [UIImage imageWithData:imageData];
    });
});
于 2013-01-05T08:19:45.593 に答える
0

なるほど、小さなタイプミスがありました:

dispatch_async(kfetchQueue, ^{
    //NSData *imageData = [NSData dataWithContentsOfURL:[photoURLs objectAtIndex:indexPath.row]];
    dispatch_async(dispatch_get_main_queue(), ^{
        //cell.imageView.image = [UIImage imageWithData:imageData];
    });    //<-------right here :)  thx!
});

ただし、結果は同じです。画像に触れたときにのみ画像を表示します。それは、NSData を取得するためにキューに入れられたときだと思います。cFRAIP メソッドではなく、init メソッドで写真をロードする必要があります。

于 2013-01-05T16:02:54.713 に答える