我UIViewController
与tableView
,通过委托连接。首次加载视图时,它会使用AFNetworking
启动加载数据。加载完成后,它会发送重新加载数据的通知。但是,我遇到了非常奇怪的错误。当我强制tableView
重新加载时,由于某种原因我无法为其标签设置文本,即使我有实际数据。这是故事板:
还有实际的代码。当我们收到通知时(在我们从服务器获取数据和填充新数据的数组之后)调用此代码:
#pragma mark - Notification Center
-(void)loadingFinished: (NSNotification*) notification{
NSLog(@"Recieved notify");
/* Перезагружаем таблицу */
isDataLoaded = YES;
NSLog(@" find 2 %@", [[self.detailDataArray objectAtIndex:1]valueForKey:@"title"]);
NSLog(@" find 3 %@", [[self.detailDataArray objectAtIndex:2]valueForKey:@"title"]);
[self.spotlightTableView reloadData];
}
在CellForRow中......:
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"Called once? ");
// Инициализация ячейки
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
if (!isDataLoaded){
NSLog(@"called no bool");
cell.titleLabel.text = @"No data";
cell.dateLabel.text = @"No date";
} else {
NSLog(@"called with b00l");
[cell.myImageView setImageWithURL:[NSURL URLWithString:[[self.detailDataArray objectAtIndex:indexPath.row +1]valueForKey:@"standardImage"]]];
cell.titleLabel.text = [[self.detailDataArray objectAtIndex:indexPath.row +1]valueForKey:@"title"];
cell.dateLabel.text = [[self.detailDataArray objectAtIndex:indexPath.row +1]valueForKey:@"created_at"];
}
NSLog(@"title - %@", [[self.detailDataArray objectAtIndex:indexPath.row +1]valueForKey:@"title"]);
NSLog(@"created_at0 - %@", [[self.detailDataArray objectAtIndex:indexPath.row +1]valueForKey:@"created_at"]);
return cell;
}
并且有一些奇怪的事情:在表视图中我可以看到加载的图像(在imageView中),但我只能看到文本
cell.titleLabel.text = @"No data";
cell.dateLabel.text = @"No date";
因此,在执行isLoaded检查后,在else语句中传递的代码块,但为什么我看不到文本?我甚至尝试用假文本填充它,但仍然,我只能看到第一个输出(当数据未加载时)。
注意:MyCell是自定义类,我也在另一个控制器中使用(在StoryBoard中具有相同的标识符)。
NSLog输出是:
2016-01-25 14:57:01.894 MedApp[6056:159310] Recieved notify
2016-01-25 14:57:01.894 MedApp[6056:159310] find 2 quis turpis vitae
2016-01-25 14:57:01.894 MedApp[6056:159310] find 3 quis turpis vitae
2016-01-25 14:57:01.895 MedApp[6056:159310] Called once?
2016-01-25 14:57:01.895 MedApp[6056:159310] called with b00l
2016-01-25 14:57:01.896 MedApp[6056:159310] title - quis turpis vitae
2016-01-25 14:57:01.896 MedApp[6056:159310] created_at0 - 2015-12-19 21:00:00
2016-01-25 14:57:01.897 MedApp[6056:159310] Called once?
2016-01-25 14:57:01.897 MedApp[6056:159310] called with b00l
2016-01-25 14:57:01.897 MedApp[6056:159310] title - quis turpis vitae
2016-01-25 14:57:01.898 MedApp[6056:159310] created_at0 - 2015-12-19 21:00:00
答案 0 :(得分:0)
谢谢你的帮助,问题出在我的自定义课程中。当我试图避免重用现有图像的错误(当第一次单元格加载第二部分的旧图像,然后新图像时)我在自定义单元类实现中写了以下内容:
-(void)prepareForReuse{
// Для избежания подгрузки неверных изображений, когда таблица пытается загрузить ячейки которые уже были использованны.
self.dateLabel = nil;
self.titleLabel = nil;
[self.myImageView cancelImageRequestOperation];
self.myImageView.image = nil;
}
当我删除
self.dateLabel = nil;
self.titleLabel = nil;
一切都很顺利。谢谢!