У меня возникла странная проблема, и я уверен, что я делаю что-то неправильно. В моем классе UITableViewController У меня есть функция следующим образом: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, который затем используется в дальнейшем при
- (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 есть в них не отображается текст. Но когда я нажимаю на ячейку, он отображает текст в ярлыках. Таким образом, это означает, что данные есть, но не обновляются при первоначальном создании. Я подозреваю, что это может быть связано с потоками, но я не эксперт по этому вопросу и буду признателен за любую помощь, которую я могу получить.
Почему вызов '[tblEventsList reloadData];' в диспетчерах async? – HRM
@HRM Поскольку пользовательский интерфейс TableView обновляется в основном потоке. Если я не использую это, представление таблицы не будет обновляться автоматически и остается пустым, пока я не прокручу его. Кстати, я попытался вызвать [tblEventList reloadData] без блока асинхронизации, и даже после прокрутки текст не загружается, если я не нажму на ячейку. Кажется, что это связано с нажатием кнопки –
, чтобы использовать 'dequeueReusableCellWithIdentifier' с другим идентификатором. например '[self.tableView dequeueReusableCellWithIdentifier: [NSString stringWithFormat: @" Cell_% i ", a]];' –