0

我有一个从我的 web 服务接收到的数组对象,用于填充 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];
}
4

1 回答 1

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];
于 2012-06-27T15:02:34.743 回答