0

私は次のコードを持っています

[self.tV beginUpdates];
NSIndexPath *iP = [NSIndexPath indexPathForRow:indexArray.count inSection:0];
[indexArray addObject:iP];
[self.tV insertRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationFade];
[self.tV endUpdates];

次のエラーが発生します

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:
'Invalid update: invalid number of rows in section 0.  The number of rows contained in an 
existing section after the update (2) must be equal to the number of rows contained in 
that section before the update (1), plus or minus the number of rows inserted or deleted
from that section (2 inserted, 0 deleted) and plus or minus the number of rows moved into
or out of that section (0 moved in, 0 moved out).'

挿入された2がどこから来ているのかわかりません。このコードは、ボタンをクリックするたびに呼び出されます。初めてindexArrayに1つの要素がある場合、コードに示されているように、もう1つの要素を追加しますが、両方の要素を再度追加しようとしているように見えます。あれは正しいですか?

アップデート

-(UITableViewCell *)tableView:(UITableView *)tableView
    cellForRowAtIndexPath:(NSIndexPath *)indexPath{

  static NSString *CellIdentifier = @"Cell";

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

  if(_imgList.count>0)
  {
      NSMutableString *fileName = [[NSMutableString alloc]
                                    initWithString:[NSString stringWithFormat: @"img"]];
      [fileName appendString: [_imgList objectAtIndex: _resultTag]];
      UIImage *image = [UIImage imageNamed: fileName];
      UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
      imageView.frame = CGRectMake(_xPos, 0, image.size.width, image.size.height);
      [cell addSubview: imageView];

      _xPos += SPACING;
  }

  return cell;
}


- (IBAction)btn:(UIButton *)sender {
    [self.resultList beginUpdates];
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:indexArray.count inSection:0];
    [indexArray addObject:indexPath];
    [self.resultList insertRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationFade];
[self.resultList endUpdates];

}
4

2 に答える 2

0

問題は、のサイズを変更していないことです_imgList(これから、メソッドの戻り値が導出されるとtableView:numberOfRowsInSection:思いますが、このメソッドは表示されません)。テーブルビューに行を挿入し、その新しい行を反映するようにデータソースを更新しないことにより、アプリケーションに不整合が生じました。

これが発生しないようにするには、行に加えた変更を正確に反映するようにデータソースに変更を加え、行を挿入または削除する前に行ってください。

宣言またはインスタンス化するコードは表示されない_imgListため、そうでない場合は、コードを作成し、、、などのNSMutableArrayメソッドを使用して、適切なオブジェクトを挿入および削除する必要があります。あなたの場合、あなたのコードは次のようになります:addObject:insertObject:atIndex:removeObjectAtIndex:

NSInteger indexToAdd = _imgList.count;
[_imgList addObject:@"whatever"];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:indexToAdd 
                                            inSection:0];
[self.resultList insertRowsAtIndexPaths:@[indexPath]
                       withRowAnimation:UITableViewRowAnimationFade];
于 2013-01-22T06:53:23.953 に答える
0

.h

int insertRow;

.m

- (void)viewDidLoad
{
     self.insertRow = self.YourArr.count;
}

[self.tV beginUpdates];
    NSIndexPath *iP = [NSIndexPath indexPathForRow:self.insertRow inSection:0];
    [indexArray addObject:iP];
    [self.tV insertRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationFade];
    [self.tV endUpdates];

self.insertRow = self.insertRow + 1;

それはあなたの問題を解決するかもしれません:)

于 2013-01-21T11:57:53.640 に答える