Was ist der NumberOfrowSInsection -Rückgabetyp für UitableView, wenn XML -Daten abgerufen werden?

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

Frage

  1. Ich habe ein NSMutableArray benannt als records und ein NSArray.

  2. Jetzt rufe ich ein XML -Attribut und seinen Wert ab, verwendete TBXML parser und Einfügen des Attributwerts in die NSArray.

  3. Dies NSArray ist ein Objekt von records.

Was wird das sein numerberOfRowsInSection Wenn ich den Wert von XML -Daten in TabelleView -Zelle anzeigen möchte?

Dies ist mein Datenabrufverfahren ....

[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]];

Und meine XML -Daten sind ....

<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>

Ich kann Daten in abrufen UITableviewCell, aber es zeigt die ersten beiden abgerufenen Daten der NSArray Weil die Anzahl der Zeilen zwei in beträgt records Array. Ich möchte jedoch festlegen, dass die NummerOfrowSection entsprechend der Gesamtzahl des von einem Attributwert gesammelten von abgerufenen nach NSArray.

Ich habe das Problem und ich weiß, dass das Problem hier ist:

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

Wie kann ich es reparieren?

War es hilfreich?

Lösung

#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;
}

Andere Tipps

Es gibt zwei Möglichkeiten, um diesem Problem anzugehen.

  1. Der richtige Weg wäre, einen Blick darauf zu werfen Dieses TBXML -Tutorial in Bezug auf Parsen. Dies zeigt Ihnen, was zu tun ist, um jedes der Attribute von jedem herauszuziehen ProductData Elementeintrag.

  2. Die Brute -Force -Methode (die nicht eine, die ich tun würde) wäre, Ihr "Rekorde" -Array zu durchlaufen, was so aussieht:

    @"<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>"
    

    und so weiter über diese schnelle Aufzählung

    for(NSString * elementText in records)
    {
        NSLog( @"%@", elementText );
        // and search for "<" and ">" and strip out the name and the value using
        // substring
    }
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top