0

聊天图像视图

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
    static NSString* CellIdentifier = @"MessageCellIdentifier";

    MessageTableViewCell* cell = (MessageTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
        cell = [[MessageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    Message* message = [self.dataModel.messages objectAtIndex:indexPath.row];

    if ([message.imgDisplay isEqualToString:@"image"]) {
        [cell setMessage:message];
    }
    else
    {
        [cell setMessage:message];
    }


    return cell;

}

- (void)setMessage:(Message*)message {
CGPoint point = CGPointZero;

NSString* senderName;
BubbleType bubbleType;
if ([message isSentByUser])
{
    bubbleType = BubbleTypeRighthand;
    senderName = NSLocalizedString(@"You", nil);
    point.x = self.bounds.size.width - message.bubbleSize.width;
    label.textAlignment = UITextAlignmentRight;
}
else
{
    bubbleType = BubbleTypeLefthand;
    senderName = message.senderName;

    label.textAlignment = UITextAlignmentLeft;
}

// Resize the bubble view and tell it to display the message text
CGRect rect;
rect.origin = point;
rect.size = message.bubbleSize;
bubbleView.frame = rect;

if ([message.imgDisplay isEqualToString:@"image"]) {

   [bubbleView setImage:[NSString stringWithFormat:@"%@.jpg",message.chatimageName] bubbleType:bubbleType];
}
else
{

    [bubbleView setText:message.text bubbleType:bubbleType];
}

// Format the message date
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterShortStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDoesRelativeDateFormatting:YES];


NSString* dateString = message.date;

// Set the sender's name and date on the label
label.text = [NSString stringWithFormat:@"%@ @ %@", senderName, dateString];
[label sizeToFit];
label.frame = CGRectMake(8, message.bubbleSize.height, self.contentView.bounds.size.width - 16, 16);
}

- (int)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.dataModel.messages count];
}

我正在开发一个聊天应用程序,下图显示了 chatViewController 的视图。它工作正常。有时我收到异常为 NSInternalInconsistencyException',原因:'无效更新:第 0 节中的行数无效。更新后的现有节 (1) 必须等于更新前该节中包含的行数 (1),加上或减去从该节插入或删除的行数(1 插入,0 删除),加上或减去移入或移出该部分的行数(0移入,0移出)。'。我不知道是什么导致了问题。请有人帮忙解决这个问题。

4

2 回答 2

1

tableView当数据源更改而不更新以反映更改时,将发生此错误。即数据源与tableView的内部表示不一致。确保一致性的最简单方法是[tableView reloadData]在数据源更改时调用。您还可以使用其他tableView重新加载方法进行更精细的更改。

于 2013-04-17T05:46:59.007 回答
-1

没问题,你只需要 [tableview reloadData]; - (void)setMessage:(Message*)message { }末尾

问题出现只是因为您的表格视图显示的单元格/数据与您当前的数据不一致。

阅读苹果开发者文档以获取有关委托/数据源的更多信息,以避免在您的开发中出现更多问题。

现在一切顺利

于 2013-04-17T06:18:38.260 回答