- (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移出)。'。我不知道是什么导致问题。有人请帮助解决这个问题。
答案 0 :(得分:1)
如果数据源发生更改而未更新tableView
以反映更改,则会发生此错误。即数据源与tableView
的内部表示不一致。确保一致性的最简单方法是在数据源发生变化时调用[tableView reloadData]
。您还可以使用其他tableView
重新加载方法进行更细粒度的更改。
答案 1 :(得分:-1)
这不是问题,你只需要这样做 [tableview reloadData]; 在......的最后 - (void)setMessage:(Message *)message {}
问题的出现只是因为您的tableview显示的单元格/数据与您当前的数据不一致。
阅读Apple开发人员文档,了解有关委托/数据源的更多信息,以避免进一步的开发问题。
目前所有最佳!