Quel sera le type de retour de numberOfRowsInSection pour uitableview lorsque les données XML est récupéré?

StackOverflow https://stackoverflow.com/questions/7806803

Question

  1. J'ai un NSMutableArray nommé records et NSArray.

  2. Maintenant, je suis un attribut Récupération XML et sa valeur, en utilisant TBXML parser et l'insertion de la valeur d'attribut dans le NSArray.

  3. NSArray est un objet de records.

Quel sera le numerberOfRowsInSection quand je veux afficher la valeur des données XML dans la cellule tableview?

Mes données procédure de récupération ....

[records addObject:[NSArray arrayWithObjects:
    [TBXML textForElement:id],
    [TBXML textForElement:productNumber],
    [TBXML textForElement:name],
    [TBXML textForElement:availableStock],
    [TBXML textForElement:image],
    [TBXML textForElement:quantityOrderMin],
    [TBXML textForElement:dateCreated],
    [TBXML textForElement:dateUpdated],nil]];

Et mes données XML sont ....

<ProductData HASH="21106941">
    <id>1</id>
    <productNumber>a91cc0f4c7</productNumber>
    <name>Product 1</name>
    <seoTitle>product-1</seoTitle>
    <viewCount>0</viewCount>
    <availableStock>100.0</availableStock>
    <lowStock>0.0</lowStock>
    <image>5e928bbae358c93caedf6115fa7d178b.jpg</image>
    <quantityOrderMax>20.0</quantityOrderMax>
    <dateCreated>2011-10-06T16:08:45</dateCreated>
</ProductData>
<ProductData HASH="409555632">
    <id>2</id>
    <productNumber>d8287e2e51</productNumber>
    <name>Product 2</name>
    <seoTitle>product-2</seoTitle>
    <description>
    <p>Lorem ipsum dolor sit amet, consectetue...</p>
    </description>
    <viewCount>0</viewCount>
    <availableStock>100.0</availableStock>
    <image>8bbd8dfff3cdd28285d07810a4fe7c32.jpg</image>
    <quantityOrderMin>1.0</quantityOrderMin>
    <dateCreated>2011-10-06T16:08:45</dateCreated>
</ProductData>

Je suis d'être capable de récupérer des données dans UITableviewCell, mais il est d'abord deux affichons des données extraites du NSArray parce que le nombre de lignes sont deux dans le tableau de records. mais je veux régler le numberOfRowsInSection sera en fonction du nombre total de la valeur de l'attribut récupéré par NSArray.

J'ai eu le problème et je sais que le problème est ici:

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        NSLog(@"The number of row in the object array:  %d ",[records count]);
        return [records count];
    }

Comment puis-je résoudre ce problème?

Était-ce utile?

La solution

#pragma mark tableview

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    int sectionCount = [records count];
    NSLog(@"section cout: %d",sectionCount);
    return sectionCount;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
        cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:15.0];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"]];
        cell.accessoryView = imageView;
        cell.accessoryType = UITableViewCellSelectionStyleNone;
        tableView.separatorColor = [UIColor clearColor];
        tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

        cellView = [[[UIView alloc] initWithFrame:CGRectMake(5,8,290, 120)] autorelease];
        cellView.backgroundColor = [UIColor clearColor];
        cellView.tag =10;
        [cell.contentView addSubview:cellView];

        imgView = [[UIImageView alloc] initWithFrame:CGRectMake(2, 40, 48, 48)];
        imgView.image = [UIImage imageNamed:@"productbox.png"];
        imgView.layer.borderColor = [UIColor blackColor].CGColor;
        imgView.layer.borderWidth = 2.0;
        imgView.tag = 5;
        [cellView addSubview:imgView];

        CGRect idLabelRect = CGRectMake(65, 0, 190, 18);
        idLabel = [[[UILabel alloc] initWithFrame:idLabelRect] autorelease];
        idLabel.textAlignment = UITextAlignmentLeft;
        idLabel.textColor = [UIColor blackColor];
        idLabel.font = [UIFont systemFontOfSize:12];
        idLabel.backgroundColor = [UIColor clearColor];
        idLabel.layer.borderColor = [UIColor grayColor].CGColor;
        idLabel.tag = 0;

        CGRect statusRect = CGRectMake(65, 22, 190, 22);
        statusLabel = [[[UILabel alloc] initWithFrame:statusRect] autorelease];
        statusLabel.textAlignment = UITextAlignmentLeft;
        statusLabel.textColor = [UIColor blackColor];
        statusLabel.font = [UIFont systemFontOfSize:12];
        statusLabel.backgroundColor = [UIColor clearColor];
        statusLabel.layer.borderColor = [UIColor grayColor].CGColor;
        statusLabel.tag = 1;

        CGRect orderDateRect = CGRectMake(65, 48, 190, 22);
        orderDate = [[[UILabel alloc] initWithFrame:orderDateRect] autorelease];
        orderDate.textAlignment = UITextAlignmentLeft;
        orderDate.textColor = [UIColor blackColor];
        orderDate.font = [UIFont systemFontOfSize:12];
        orderDate.backgroundColor = [UIColor clearColor];
        orderDate.layer.borderColor = [UIColor grayColor].CGColor;
        orderDate.tag = 2;

        CGRect byRect = CGRectMake(65, 75, 190, 22);
        byLabel = [[[UILabel alloc] initWithFrame:byRect] autorelease];
        byLabel.textAlignment = UITextAlignmentLeft;
        byLabel.textColor = [UIColor blackColor];
        byLabel.font = [UIFont systemFontOfSize:12];
        byLabel.backgroundColor = [UIColor clearColor];
        byLabel.layer.borderColor = [UIColor grayColor].CGColor;
        byLabel.tag = 3;

        CGRect totalRect = CGRectMake(65, 98, 190, 22);
        totalLabel = [[[UILabel alloc] initWithFrame:totalRect] autorelease];
        totalLabel.textAlignment = UITextAlignmentLeft;
        totalLabel.textColor = [UIColor blackColor];
        totalLabel.font = [UIFont systemFontOfSize:12];
        totalLabel.backgroundColor = [UIColor clearColor];
        totalLabel.layer.borderColor = [UIColor grayColor].CGColor;
        totalLabel.tag = 4;

        [cellView addSubview:idLabel];
        [cellView addSubview:statusLabel];
        [cellView addSubview:orderDate];
        [cellView addSubview:byLabel];
        [cellView addSubview:totalLabel];
    }

    cellView = (UIView *)[cell.contentView viewWithTag:10];
    idLabel = (UILabel *)[cellView viewWithTag:0];
    statusLabel = (UILabel *)[cellView viewWithTag:1];
    orderDate = (UILabel *)[cellView viewWithTag:2];
    byLabel = (UILabel *)[cellView viewWithTag:3];
    totalLabel = (UILabel *)[cellView viewWithTag:4];
    imgView = (UIImageView *)[cellView viewWithTag:5];
    idLabel.text = [NSString stringWithFormat:@"Order Id: %@",[[records objectAtIndex:indexPath.section] objectAtIndex:0]];
    statusLabel.text = [NSString stringWithFormat:@"Status: %@",[[records objectAtIndex:indexPath.section] objectAtIndex:1]];
    orderDate.text = [NSString stringWithFormat:@"Date: %@",[[records objectAtIndex:indexPath.section] objectAtIndex:2]];
    byLabel.text =[NSString stringWithFormat:@"By: %@",[[records objectAtIndex:indexPath.section] objectAtIndex:3]];
    totalLabel.text =[NSString stringWithFormat:@"Total: %@",[[records objectAtIndex:indexPath.section] objectAtIndex:4]];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //Get the selected country
    NSString *selectedSection = [ NSString stringWithFormat:@"%@",[[records objectAtIndex:indexPath.section] objectAtIndex:0] ];
    dvController = [[OrderDetailsViewController alloc] initWithNibNameAndCurrentTweetUser:@"OrderDetailsViewController" bundle:nil:selectedSection];
    [self.navigationController pushViewController:dvController animated:YES];
    [dvController release];
    dvController = nil;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 130;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 20)];
    [v setBackgroundColor:[UIColor blackColor]];

    UILabel* hdr = [[[UILabel alloc] initWithFrame:CGRectMake(10,0, tableView.bounds.size.width,20)] autorelease];
    hdr.textAlignment = UITextAlignmentLeft;
    hdr.font = [UIFont fontWithName:@"Arial-BoldMT" size:12];
    hdr.textColor = [UIColor whiteColor];
    hdr.backgroundColor = [UIColor blackColor];
    [v addSubview:hdr];

    hdr.text = [NSString stringWithFormat:@"Order #%@",[[records objectAtIndex:section] objectAtIndex:0]];
    return v;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 20;
}

Autres conseils

Il y a deux façons d'aborder ce problème.

  1. La bonne façon serait de jeter un oeil à ce tutoriel TBXML en ce qui concerne l'analyse syntaxique. Cela montre que vous quoi faire pour analyser chacun des attributs de chaque entrée de l'élément ProductData.

  2. La méthode de la force brute (qui n'est pas un que je ferais) serait d'analyser dans votre tableau « enregistrements », qui ressemble à ceci:

    @"<id>1</id>",@"<productNumber>a91cc0f4c7</productNumber>",@"<name>Product 1</name>",@"<seoTitle>product-1</seoTitle>",@"<viewCount>0</viewCount>",
    @"<availableStock>100.0</availableStock>",@"<lowStock>0.0</lowStock>",@"<image>5e928bbae358c93caedf6115fa7d178b.jpg</image>",
    @"<basePrice>10.0</basePrice>",@"<costPrice>0.0</costPrice>",@"<height>1.0</height>",@"<width>1.0</width>",@"<depth>1.0</depth>",@"<weight>2.0</weight>"
    

    et ainsi de suite par cette énumération rapide

    for(NSString * elementText in records)
    {
        NSLog( @"%@", elementText );
        // and search for "<" and ">" and strip out the name and the value using
        // substring
    }
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top