我面临一个奇怪的问题,我相信我做错了什么。在我的UITableViewController I类有一个函数,如下所示:UITableViewCell不显示加载数据,但在选中时显示它
-(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对象的数组,然后将其然而,当单元被装载lblTitle和lblDate有用于稍后由
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Configure the cell data
NSLog(@"IndexPathRow: %d", indexPath.row);
UITableViewCell *cell = (UITableViewCell*)eventsListCells[indexPath.row];
return cell;
}
没有文字显示在其中。但是当我点击一个单元格时,它会在标签中显示文本。所以这意味着数据在那里,但最初创建时不会刷新。我怀疑这可能与线程有关,但我不是这方面的专家,并希望得到任何帮助。
为什么调用'[[tblEventsList reloadData];'在调度异步? – HRM
@HRM因为TableView UI在主线程中更新。如果我不使用它,那么表格视图将不会自动更新,并保持空白,直到我滚动它。顺便说一句,我尝试调用[tblEventList reloadData]没有异步块,甚至滚动后,文本不加载,除非我点击单元格。这似乎与点击 –
尝试使用具有不同标识符的'dequeueReusableCellWithIdentifier'有关。例如'[self.tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@“Cell_%i”,a]];' –