gpt4 book ai didi

ios - UITableViewCell 不显示加载的数据,但在选择时显示

转载 作者:行者123 更新时间:2023-11-29 12:53:15 24 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,我确定我做错了什么。在我的 UITableViewController 类中,我有一个函数如下:

-(void)EERefreshView
{
NSLog(@"App delegate requested the view be refreshed");
[self loadEventsFromDB];

for(int a=0;a<eventsList.count;a++)
{

DB_EEEvent *event = (DB_EEEvent*)eventsList[a];
UITableViewCell *cell =
[self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
//NSLog(@"CellID %@", cell.reuseIdentifier);


//get references to the UI components
UILabel *lblTitle = (UILabel*)[cell.contentView viewWithTag:5];
UILabel *lblDate = (UILabel*) [cell.contentView viewWithTag:6];
UIImageView *imgEvent = (UIImageView*)[cell.contentView viewWithTag:7];

//set values
lblTitle.text = event.name;

lblDate.text = [NSString stringWithFormat:@"%@ - %@",
event.startdate,event.enddate];

AppDelegate *del = [AppDelegate sharedAppDelegate]; //need this to get the BaseURL

// Here we use the new provided setImageWithURL: method to load the web image
NSString * imageURL =[[NSString alloc] initWithFormat:@"http://%@%@",del.api.BaseURL,event.logo];
NSString* webStringURL = [imageURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:webStringURL];

[imgEvent setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
//do somethign when image call completes
}];

[eventsListCells addObject:cell];

if(a == selectedEvent)
{


}
}

dispatch_async(dispatch_get_main_queue(), ^{
[tblEventsList reloadData];
});

}

此函数加载一个包含 UITableViewCell 对象的数组,稍后由

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Configure the cell data
NSLog(@"IndexPathRow: %d", indexPath.row);
UITableViewCell *cell = (UITableViewCell*)eventsListCells[indexPath.row];
return cell;


}

然而,当加载单元格时,lblTitle 和 lblDate 中没有显示文本。但是当我点击一个单元格时,它会在标签中显示文本。所以这意味着数据在那里,但在最初创建时不会刷新。我怀疑这可能与线程有关,但我不是这方面的专家,如果能得到任何帮助,我将不胜感激。

最佳答案

我知道是什么困扰着您以及您创建此方法的原因,但您不需要它。你需要后台线程的唯一原因是你的图像加载,所以应该在 bkg 中抛出。线程和其余代码应该在 -

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

你真的不需要预先创建单元格,你不能因为它们是可重用的。例如,如果您在 eventsList 中有 50 个元素,而屏幕上只有 5 个单元格的空间,则您无法创建 50 个单元格,因为代码将仅创建 5+1 并在它们出现在屏幕上时重复使用它们,因此您的 eventsList 的每个元素都将使用这 5 个单元格之一,在另一侧,每个单元格都将成为 eventsList 数组中 10 个不同元素的宿主。所以你可以看到你的代码没有多大意义......

关于ios - UITableViewCell 不显示加载的数据,但在选择时显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21906811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com