重新加载UITableView数据无法正常工作

时间:2012-06-27 14:34:55

标签: ios uitableview reload

我有一个从我的webservice收到的数组对象,用于填充UITableView。我正在尝试实现一个从Web服务获取新数组的方法,并重新定义填充表的数组,然后重新加载tableView以使用此数组中的新对象。 这是应该开展工作的方法:

WSCaller *caller = [[WSCaller alloc]init];

    arrayFromWS = [caller getArray];
    [self.table reloadData];

它不起作用。有什么想法吗?

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

NSString *CellIdentifier = @"productsCellIdentifier";

ProductsCell *cell = nil;

cell = (ProductsCell *)[self.table dequeueReusableCellWithIdentifier:CellIdentifier];

if (!cell) 
{
    NSArray *topLevelObjects = [[NSBundle mainBundle]loadNibNamed:@"ProductsCell" owner:nil options:nil];

    for (id currentObject in topLevelObjects) 
    {
        if ([currentObject isKindOfClass:[ProductsCell class]]) 
        {
            cell = (ProductsCell *)currentObject;
            break;
        }
    }
}

if (productsMutableArray) 
{
    cell.backgroundColor = [UIColor whiteColor];
    cell.productName.text = [[self.productsMutableArray objectAtIndex:indexPath.row]objectForKey:@"name"];

}

return cell;

}

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

1 个答案:

答案 0 :(得分:0)

您的数据源实现错误(或至少是片段)。

首先,您没有保留arrayFromWS:

WSCaller *caller = [[WSCaller alloc] init];
arrayFromWS = [caller getArray];
[self.table reloadData];

其次,在你的tableView:numberOfRowsInSection:和tableView:cellForRowAtIndexPath:方法中,你使用的是另一个数组(productsMutableArray)。

要解决这个问题,我建议更改上面的代码(假设您的productsMutableArray是一个强大的/保留属性:

WSCaller *caller = [[WSCaller alloc] init];
self.productsMutableArray = [NSMutableArray arrayWithArray:[caller getArray]];
[self.table reloadData];