UITableView + NSMutableArray奇怪的行为

时间:2010-07-20 15:00:36

标签: iphone cocoa-touch uitableview nsmutablearray

我目前正在尝试从互联网下载的plist中填充UITableView。 plist被加载到NSMutableArray中,然后保存为文件,工作正常。

当尝试用它填充我的UITableView时,我遇到了麻烦。

UITableView只显示* plist文件中的前8个条目(但有98个),然后遍历它们直到达到98,所以它总是相同的8个条目而不是98个不同的条目。

这是我的日志:

2010-07-20 15:50:19.064 myCustomers[15221:207] New Cell
2010-07-20 15:50:19.065 myCustomers[15221:207] Bob
2010-07-20 15:50:19.068 myCustomers[15221:207] New Cell
2010-07-20 15:50:19.069 myCustomers[15221:207] Jo
2010-07-20 15:50:19.071 myCustomers[15221:207] New Cell
2010-07-20 15:50:19.071 myCustomers[15221:207] Neil
2010-07-20 15:50:19.075 myCustomers[15221:207] New Cell
2010-07-20 15:50:19.075 myCustomers[15221:207] Robert
2010-07-20 15:50:19.077 myCustomers[15221:207] New Cell
2010-07-20 15:50:19.078 myCustomers[15221:207] Jack
2010-07-20 15:50:19.079 myCustomers[15221:207] New Cell
2010-07-20 15:50:19.080 myCustomers[15221:207] John
2010-07-20 15:50:19.081 myCustomers[15221:207] New Cell
2010-07-20 15:50:19.082 myCustomers[15221:207] Ralph
2010-07-20 15:50:19.083 myCustomers[15221:207] New Cell
2010-07-20 15:50:19.084 myCustomers[15221:207] Bart

它创建新单元格,但随后在8处停止并循环。 :/

以下是我创建单元格并获取数组数据的方法:

if (tableView == myTable)
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

if (indexPath.section == 0) 
{
cell.textLabel.text = [self.dataForTable objectAtIndex:indexPath.row];
    NSLog(@"New Cell");
    NSLog(@"%@",[self.dataForTable objectAtIndex:indexPath.row]);
}
}
return cell;
}

NSMutableArray“dataForTable”就是这样创建的:

if ([[[NSMutableArray alloc] initWithContentsOfFile:fullFileName] autorelease] != nil)
    {
    self.dataForTable = [[[NSMutableArray alloc] initWithContentsOfFile:fullFileName] autorelease];
    }
    else 
    {
        self.dataForTable = [[NSMutableArray alloc] init]; //create a brand new array if there is no entries file.
    }

数组的数据很好,我在日志中检查了这一点,并在那里显示了所有98个条目,但表视图只使用8。

我一直无法为此找到解决方案,有人可以帮帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

在您的cellForRowAtIndexPath:方法中,只有在创建新实例时才设置单元格。虽然UITableView重复使用行的单元格(即,隐藏的行的单元格用于可见的行),并且每次都需要为行设置单元格 - 因此您应该将代码更改为:

... 
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}

if (indexPath.section == 0) 
{
    cell.textLabel.text = [self.dataForTable objectAtIndex:indexPath.row];
    NSLog(@"New Cell");
    NSLog(@"%@",[self.dataForTable objectAtIndex:indexPath.row]);
}

return cell;