2013-09-04 2 views
1

У меня есть табличное представление в моем приложении для обмена сообщениями с пользовательскими tableviewcells. Этот столбец заполнен массивом из JSON. У меня есть UIImageView в ячейке, где отображается изображение с голубой точкой, если сообщение не прочитано.UITableViewCell ImageView не обновляется

Вот код:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:YES]; 
    messagesArray = [self getMessages]; 
    [messagesTableView reloadData]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *cellIdentifier = @"MessagesCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (!cell) 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 

    NSDictionary *messagesDictionary = [messagesArray objectAtIndex:indexPath.row]; 

    UILabel *nameLabel = (UILabel *)[cell viewWithTag:100];  
    nameLabel.text = [messagesDictionary objectForKey:@"fromUserName"]; 

    UIImageView *readImage = (UIImageView *)[cell viewWithTag:103]; 
    NSNumber *boolNumber = [messagesDictionary valueForKey:@"readFlag"]; 
    BOOL read = [boolNumber boolValue]; 

    if (!read) 
     readImage.image = [UIImage imageNamed:@"Message Read Circle"]; 

    return cell; 
} 

При выборе сообщения, я отправляю сообщение на сервер, чтобы сообщить ему о том, что сообщение читается, но когда я иду назад, он все еще имеет непрочитанное изображение , Если я уйду из приложения в симуляторе и перезагрузите приложение, непрочитанное изображение исчезнет из сообщения, которое я выбрал, поэтому я знаю, что метка читается как прочитанное сообщение. Почему не будет [messagesTableView reloadData]?

+0

Когда вы обновляете 'messagesArray', чтобы установить' readFlag'? – Wain

+0

В 'viewDidAppear'. Разве это не вызвано, когда я возвращаюсь к этому табличному представлению из сообщения? –

+1

Мое предположение (лучше всего я могу предоставить предоставленную информацию) заключается в том, что вы вызываете 'reloadData' до того, как у сервера есть возможность завершить. Вы обновляете информацию о сервере, а затем успешно перезагружаете таблицу? –

ответ

3

Поскольку вид таблицы клетки повторно, вы должны установить изображение в любом случае, и не только тогда, когда read == NO. Что-то вроде:

if (read) 
    readImage.image = [UIImage imageNamed:@"Message Read Circle"]; 
else 
    readImage.image = [UIImage imageNamed:@"Message Unread Circle"]; 
+0

Вот что я получаю за длинный ответ;) – JonahGabriel

1

Это не выглядит, как вы на самом деле вызывая reloadData на вашем Tableview в вашем viewDidAppear, как вы сказали, что вы делаете.

Кроме того, как сказал Майк З, вы можете иметь проблемы со сроками вызова getMessages. Является ли этот метод синхронным или асинхронным? Проводка некоторых из этого кода также может помочь.

Кроме того, вам необходимо убедиться, что вы установили readImage в ноль, если ваше сообщение было прочитано. Помните, что эти ячейки удалены, поэтому, если вы не зададите imageView для истинного и ложного состояния свойства read, вы можете получить ошибочные результаты.

Смежные вопросы