从NSMutableArray获取记录时,Indexpath.row无法正常工作

时间:2013-03-26 05:07:27

标签: iphone ios uitableview nsmutablearray

我正在尝试加载来自webservice的数据UITableView。一切都很好。但是,当使用UITableView委托方法在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中显示记录时,我会获得如下所示的异常 -

enter image description here

这是我的代码 -

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell; //= [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Reuse_Cell"];
    UILabel *label = nil;

    cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    cell.selectedBackgroundView = [[UIView alloc]init];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];

        label = [[UILabel alloc]initWithFrame:CGRectZero];
        [label setLineBreakMode:UILineBreakModeWordWrap];
        [label setNumberOfLines:1];
        [label setFont:[UIFont fontWithName:@"Trebuchet MS" size:18]];
        [label setTag:1];
        label.backgroundColor = [UIColor clearColor];
        label.textColor = [UIColor blackColor];
        [[cell contentView] addSubview:label];

    }

    if (!label)
        label = (UILabel *)[cell viewWithTag:1];

    [label setText:[[webserviceRecords objectAtIndex:indexPath.row] objectForKey:@"catName"]];
    [label setFrame:CGRectMake(10.0, 5.0, 225.0, 35.0)];

    cell.selectedBackgroundView.backgroundColor = RGBACOLOR(151.0, 191.0, 69.0, 1.0);
    cell.layer.borderWidth = 2.0f;
    cell.layer.borderColor = RGBCOLOR(214, 218, 1).CGColor;

    return cell;
}

我的数组记录 -

http://pastie.org/7120406

自定义init方法

- (id)initwithInteger:(NSInteger )integer
{
    self = [super init];
    if (self) {
        startingpage = integer;
        webserviceRecords = [[NSMutableArray alloc]init];
    }
    return self;
}

NumberofRowsInSection

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"Row count - %d", [webserviceRecords count]);
    return [webserviceRecords count];
}

2 个答案:

答案 0 :(得分:1)

您在检查单元格是否有值之前设置了单元格selectedBackgroundView。在执行此操作之前,您应该先检查单元格是否为零。

另外,您可能会发现使用免费的Sensible TableView框架显示数组要容易得多。框架会自动从阵列中生成所有单元格(包括所有详细视图),甚至可以直接从Web服务中获取数据。应该为您节省很多头痛和手工工作。希望这会有所帮助。

答案 1 :(得分:1)

真的是一个愚蠢的错误。我已将JSON数据直接解析为我的NSMutableArray我先解析如下 -

webserviceRecords = [NSJSONSerialization JSONObjectWithData:mutableData options:0 error:&error];

而不是这个我已经解决了这个问题 -

NSArray *array = nil;
array = [NSJSONSerialization JSONObjectWithData:mutableData options:0 error:&error];
webserviceRecords = [array mutableCopy];

这有助于我解决我的问题。感谢您回答我的问题。

干杯!