tableView中的NSInternalInconsistencyException

时间:2013-04-17 05:40:59

标签: objective-c uitableview

chatimageview

- (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移出)。'。我不知道是什么导致问题。有人请帮助解决这个问题。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-1)

这不是问题,你只需要这样做      [tableview reloadData]; 在......的最后      - (void)setMessage:(Message *)message {}

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

阅读Apple开发人员文档,了解有关委托/数据源的更多信息,以避免进一步的开发问题。

目前所有最佳