在UITableView中解析结果

时间:2012-05-28 19:35:51

标签: html ios parsing uitableview

我正在使用Ben Reeves的HTMLParser。它工作得很好但唯一的问题是我无法将输出放在UITableView中。任何人都可以告诉我这段代码有什么问题? .................................................. .................................

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    NSError *error = nil;
    NSURL *url=[[NSURL alloc] initWithString:@"http://website.com/"];
    NSString *strin=[[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

    HTMLParser *parser = [[HTMLParser alloc] initWithString:strin error:&error];

    if (error) {
        NSLog(@"Error: %@", error);
        return;
    }

    HTMLNode *bodyNode = [parser body];
    NSArray *divNodes = [bodyNode findChildTags:@"div"];

    for (HTMLNode *inputNode in divNodes) {
        if ([[inputNode getAttributeNamed:@"class"] isEqualToString:@"views-field-title"]) {
           NSLog(@"%@", [inputNode allContents]); 

           listData = [[NSArray alloc] initWithObjects:[inputNode allContents], nil];   
        }
    }      
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    return [self.listData count]; 
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: SimpleTableIdentifier];

    if (cell == nil) 
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier];
    }

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

    return cell; 
}

@end

1 个答案:

答案 0 :(得分:0)

每次找到新元素时,都会重新初始化数组。我想你需要搬家

listData = [[NSArray alloc] initWithObjects:[inputNode allContents], nil];

在循环之外并将其更改为

listData = [[NSMutableArray alloc] init];

listData应该是NSMutableArray,因此您可以向其添加数据。您还需要在变量定义中更改它。

然后在循环中使用[listData addObject:[inputNode allContents]];