在表视图中检索正确的数据

时间:2014-11-02 00:04:04

标签: objective-c uitableview

我正在开发一个充当电子邮件客户端的iOS应用程序。我的故事板中的一个视图是一个收件箱,其中显示每个电子邮件:邮件的发件人,对话的标题,邮件正文的开头和日期&消息发送的时间。 (在tableView中) 我还检索消息的状态,如果消息尚未读取(状态= UNREAD),我将这些文本(发送者,标题)以粗体显示,如果读取消息(状态= READ),则以正常样式。 问题是,即使少数消息的状态为READ,它也会设置为粗体。 这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Configure Cell
     messageTableViewCell *cell = [self.mytableView dequeueReusableCellWithIdentifier:cellidentifier forIndexPath:indexPath];
    if (!cell) {
        cell = [[messageTableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellidentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    if (tableView == self.searchDisplayController.searchResultsTableView) {
        reloadedMessage = [self.results objectAtIndex:indexPath.row];
        cell.nom.text = [reloadedMessage valueForKey:@"sentBy"];
        cell.titre.text = [reloadedMessage valueForKey:@"messageThreadTitle"];
        cell.resume.text = [reloadedMessage valueForKey:@"messageBody"];
        cell.date.text = [reloadedMessage valueForKey:@"sentOn"];

    } else {
        currentMessage = [self.unreadmessagesArray objectAtIndex:indexPath.row];
        cell.nom.text = [currentMessage valueForKey:@"sentBy"];
        cell.titre.text = [currentMessage valueForKey:@"messageThreadTitle"];
        cell.resume.text = [currentMessage valueForKey:@"messageBody"];
        cell.date.text = [currentMessage valueForKey:@"sentOn"];
        NSString *u = [currentMessage valueForKey:@"status"];
        if ([u isEqualToString:@"UNREAD"]) {
                [cell.titre setFont:[UIFont boldSystemFontOfSize:15]];


          }
        }
        return cell;
    }
    `

数据的例子:

   {
        messageBody = ":-)...";
        messageId = 643;
        messageThreadId = 529;
        messageThreadTitle = "dernier nstimer";
        sentBy = "IR  Maxim";
        sentOn = "2014-10-30 11:40:16";
        status = UNREAD;
    },
            {
        messageBody = "le timer...";
        messageId = 642;
        messageThreadId = 528;
        messageThreadTitle = nstimer;
        sentBy = "IR Maxim";
        sentOn = "2014-10-30 11:30:16";
        status = UNREAD;
    },
            {
        messageBody = "gras...";
        messageId = 639;
        messageThreadId = 525;
        messageThreadTitle = "mettre en gras";
        sentBy = "IR Maxim";
        sentOn = "2014-10-30 11:03:02";
        status = SENT;
    },

任何人都遇到过这个问题或者想知道问题是什么?

2 个答案:

答案 0 :(得分:0)

将字体设置为粗体后,您永远不会将其设置回来。因此,如果重用的单元格恰好有粗体文本,则下次使用文本时它仍然是粗体。添加一个else子句,将字体设置回非粗体。

   if ([u isEqualToString:@"UNREAD"]) {
            [cell.titre setFont:[UIFont boldSystemFontOfSize:15]];
   }
   else {
       [cell.titre setFont:[UIFont systemFontOfSize:15]];
   }

答案 1 :(得分:0)

我认为你的数据来源搞砸了:

你有:

reloadedMessage = [self.results objectAtIndex:indexPath.row];

还有:

currentMessage = [self.unreadmessagesArray objectAtIndex:indexPath.row];

这些不太可能与您要求的indexPath同步。

如果你设置粗体字但没有重置它,你至少应该在单元的prepareForReuse方法中将字体重置为正常,这是你应该重置所有单元格的地方。 ; s属性为默认值。