组表视图 - 加载数据

Posted

技术标签:

【中文标题】组表视图 - 加载数据【英文标题】:Group Table View - loading data 【发布时间】:2011-04-17 17:55:48 【问题描述】:

寻求有关如何正确加载分组表视图数据的帮助。我正在使用以下代码加载我认为应该为“cellForRowAtIndexPath”准备一个数组“详细信息”的数据。然而,当我运行程序时,我得到所有组的相同数据,它恰好是我数据中的最后一行(在一个名为“Users”的 NSArray 中)。显然我做错了什么,但不确定是什么......请帮忙。

// Customize the number of rows in the table view.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

NSRange aRange;
aRange.length = 9; aRange.location = 16;
NSString *users = [self.Users objectAtIndex: section];
NSString *subtitle = [NSString stringWithString:[users substringWithRange:aRange]];
details = [[NSArray arrayWithObjects:subtitle, subtitle, subtitle, nil] retain];

return [details count];

数据加载例程如下:

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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];


// Configure the cell.
UIImage *cellImage = [UIImage imageNamed:@"world.png"];
cell.imageView.image = cellImage;
cell.textLabel.text = [details objectAtIndex:indexPath.row];
return cell;

【问题讨论】:

【参考方案1】:

根据您发布的内容,details 数组在每次表视图向其数据源询问一节中的行数时都会被重置。 details 是在最后一次调用 -tableView:numberOfRowsInSection: 时最后设置的,即最后一个部分。设置后,同一数组为所有部分提供cell.textLabel.text 的数据。所以你得到的数据不正确。

计算所有details 数组并将其存储在不同的数组中是合适的,例如detailsArray。 然后可以像[[detailsArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]

一样访问数据

您的代码的另一个问题是,每次调用 numberOfRowsInSection 时,都会泄露数据,因为 details 正在被重置而没有释放较早的对象。

【讨论】:

以上是关于组表视图 - 加载数据的主要内容,如果未能解决你的问题,请参考以下文章

使用视图作为数据库中模块之间的数据接口

从视图中选择 int 列很慢

有没有办法在重新加载表格视图数据之前添加加载视图

加载数据后如何防止滚动视图滚动到网络视图?

从集合视图重新加载数据时的多个视图

快速加载两个集合视图和一个表视图的核心数据