我目前正在尝试从互联网下载的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。
我一直无法为此找到解决方案,有人可以帮帮我吗?
谢谢!
答案 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;