2013-04-17 37 views
0

chatimageviewNSInternalInconsistencyException中的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移出)'。我不知道是什么原因造成问题。有人请帮忙解决这个问题。

回答

-1

这不是问题,你只需要做 [tableview reloadData];结束 - (空)setMessage:(消息*)消息{}

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

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

所有的最好现在!

+0

这个答案是错误的。如果你在'setMessage'的末尾调用'[tableView reloadData]',你的应用将会有一个无限的递归b/c'setMessage'从'tableView:cellForRowAtIndexPath'被调用。每当你修改数据源时,你需要调用'reloadData',你的情况就是'messages'数组。 – XJones

+0

@XJones:雅,你说的对,我的错。必须在修改数据后调用reloadData。 – Anil

+0

接受答案-1票,这很好! – viral

1

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

相关问题