无法为UITableViewCell设置文本

时间:2016-01-25 11:51:29

标签: ios objective-c uitableview

UIViewControllertableView,通过委托连接。首次加载视图时,它会使用AFNetworking启动加载数据。加载完成后,它会发送重新加载数据的通知。但是,我遇到了非常奇怪的错误。当我强制tableView重新加载时,由于某种原因我无法为其标签设置文本,即使我有实际数据。这是故事板:

enter image description here

还有实际的代码。当我们收到通知时(在我们从服务器获取数据和填充新数据的数组之后)调用此代码:

#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";

enter image description here

因此,在执行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

1 个答案:

答案 0 :(得分:0)

谢谢你的帮助,问题出在我的自定义课程中。当我试图避免重用现有图像的错误(当第一次单元格加载第二部分的旧图像,然后新图像时)我在自定义单元类实现中写了以下内容:

-(void)prepareForReuse{

    // Для избежания подгрузки неверных изображений, когда таблица пытается загрузить ячейки которые уже были использованны.

    self.dateLabel = nil;
    self.titleLabel = nil;
    [self.myImageView cancelImageRequestOperation];
    self.myImageView.image = nil;
}

当我删除

self.dateLabel = nil;
self.titleLabel = nil;
一切都很顺利。谢谢!