UITableView + NSMutableArray 奇怪的行为
Posted
技术标签:
【中文标题】UITableView + NSMutableArray 奇怪的行为【英文标题】:UITableView + NSMutableArray weird behavior 【发布时间】:2010-07-20 15:00:36 【问题描述】:我目前正在尝试从从 Internet 下载的 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 个。
我一直找不到解决办法,谁能帮帮我?
谢谢!
【问题讨论】:
我不确定,但我认为这是因为一个屏幕上只能显示 8 个单元格。 错了,这是因为他在重复使用表格单元格。您在创建单元之后 为每个单元设置文本,如下面的 Vladimir 所示。否则,最初创建的 8 个单元格永远不会更新新内容,而只会显示它们最初初始化的内容。 【参考方案1】:在您的 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;
【讨论】:
以上是关于UITableView + NSMutableArray 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章