0

デリゲートがありますが、他のデリゲート行がないと機能しません。

- (id)initWithData:(NSData *)data delegate:(id <ParseOperationDelegate>)theDelegate {

    self = [super init];

    if (self != nil) {
        self.dataToParse = data;
        self.delegate = theDelegate;
    }

    appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];

    return self;
}

セルにデータをロードする必要がありますが、最初のスクロールの前にデータが表示されません。私に何ができる?

編集:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"productCell";
    static NSString *PlaceholderCellIdentifier = @"placeholderCell";

    int nodeCount = [appDelegate.products count];

    if (nodeCount == 0 && indexPath.row == 0) {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:PlaceholderCellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:PlaceholderCellIdentifier];
            cell.detailTextLabel.textAlignment = UITextAlignmentCenter;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }

        cell.detailTextLabel.text = @"Loading...";

        return cell;
    }

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }

    if (nodeCount > 0) {
        XMLProductView *listedProduct = [appDelegate.products objectAtIndex:indexPath.row];

        cell.textLabel.text = listedProduct.name;
        // cell.detailTextLabel.text = appRecord.artist;

        if (!listedProduct.productImage) {
            if (self.tableView.dragging == NO && self.tableView.decelerating == NO) {
                [self startImageDownload:listedProduct forIndexPath:indexPath];
            }
            UIImageView *listedImage = (UIImageView *)[cell viewWithTag:1];
            listedImage.image = [UIImage imageNamed:@"Placeholder.png"];
        }
        else {
            UIImageView *listedImage = (UIImageView *)[cell viewWithTag:1];
            listedImage.image = listedProduct.productImage;
        }

    }

    return cell;
}
4

1 に答える 1

2

あなたのコードは、いくつかのイベント、またはいくつかのファイルがフェッチまたはダウンロードされるのを待っているように見えるので[tableview reloadData];、このデータがダウンロードされたときに呼び出す必要があります、

私はコードからそれを理解することはできませんが、私の内臓は私にこれを教えてくれます

1つ目:intnodeCount = [appDelegate.products count];からのデータの準備ができるのを待っているので、このデータの準備ができたときに呼び出されるある種のデリゲートが必要になります

2番目:ここで画像がダウンロードされるのを待っているので、これが実際にダウンロードされるときは、画像をそのセルまたはテーブル[self startImageDownload:listedProduct forIndexPath:indexPath]に設定する必要がありますreloadData

それは私がコードから理解できることです。

于 2012-06-09T09:37:06.783 に答える