NSInternalInconsistencyException中的tableView
- (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.It的观点是沃金fine.sometimes我得到异常作为NSInternalInconsistencyException“理由是:”无效的更新:无效部分0中的行数。更新(1)后现有部分中包含的行数必须等于更新前(1)部分中包含的行数,加上或减去插入的行数或从该部分删除(插入1个,删除0个),并加上或减去移入或移出该部分的行数(0移入,0移出)'。我不知道是什么原因造成问题。有人请帮忙解决这个问题。
这个答案是错误的。如果你在'setMessage'的末尾调用'[tableView reloadData]',你的应用将会有一个无限的递归b/c'setMessage'从'tableView:cellForRowAtIndexPath'被调用。每当你修改数据源时,你需要调用'reloadData',你的情况就是'messages'数组。 – XJones
@XJones:雅,你说的对,我的错。必须在修改数据后调用reloadData。 – Anil
接受答案-1票,这很好! – viral