Ios 异步TableViewCell数据
我有一个自定义的TableViewCell,我从一个异步函数中的数据库获取数据,该函数返回一个UserObject,其中包含我需要的数据。我的问题是Ios 异步TableViewCell数据,ios,objective-c,uitableview,asynchronous,Ios,Objective C,Uitableview,Asynchronous,我有一个自定义的TableViewCell,我从一个异步函数中的数据库获取数据,该函数返回一个UserObject,其中包含我需要的数据。我的问题是cellforrowatinexpath在异步块完成之前返回单元格。我如何解决这个问题 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *simpl
cellforrowatinexpath
在异步块完成之前返回单元格。我如何解决这个问题
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"ImageWorkoutCellCollapsed";
ImageWorkoutCellCollapsed *cell = (ImageWorkoutCellCollapsed *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if(cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ImageWorkoutCellCollapsed" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
WorkoutObject *workout = [[WorkoutObject alloc]init];
workout = [appDelegate.workoutObjectsArray objectAtIndex:indexPath.row];
cell.workoutTitle.text = workout.workoutTitle;
cell.workoutViewCount.text = workout.workoutDescription;
__block UserObject *cellUserObject = [[UserObject alloc]init];
[dbPointer getUserObjectFromDB:workout.workoutOwnerID completion:^(UserObject *result)
{
cellUserObject = result;
}];
cell.userName.text = cellUserObject.username;
return cell;
}
您应该确保在数据可用之前未调用CellForRowatineXpath。 您有一个行数的计数,必须将该计数设置为N,但尚未获取N个数据项。 在获取所有数据之前,不要设置此数字 或 当数据到达时,不断更新行数并刷新表视图 或 返回包含占位符数据的单元格。然后,一旦单元格的实际数据可用,就更新内容并刷新表 或
上述所有解决方案都涉及将数据提取移出CellForRowatineXpath。但是,如果提取数据的调用很快,因此不会减慢表的绘制速度,则需要将提取从异步转换为同步。但是,对于视图控制器组件来说,直接访问数据库不是一个好的设计,相反,它应该访问一个模型,并且模型应该抽象掉数据库中数据的实现细节。您应该将单元格更新转换为行的重新加载,如下所示: 1) 您应该使用dequeueReusableCellWithIdentifier:forIndexPath,而不是您正在使用的版本 2) 您不需要检查(cell==nil),因为1)永远不会返回nil 3) 通过WorkUtownerId将新的NSMutableDictionary属性添加到缓存
UserObject
4) 当要求您输入单元格时,请从3)中查找字典,查看它是否包含您的数据对象。如果不是,则运行DB查询。如果有对象,则设置单元格值
5) 在数据库查找的完成处理程序中,通过WorkUtownerId将返回的对象缓存到新字典中。然后简单地请求表重新加载该行
结果是,当单元格所表示的数据更新时,单元格也会更新