从表中删除行后,复选框仍然存在

时间:2013-06-18 15:02:24

标签: uitableview nsmutablearray unrecognized-selector

我使用此页面在表格上构建了一个复选框功能:

http://www.carrotcoded.com/2012/12/02/uibutton-within-uitableviewcell-checkbox/

这很好用,我可以选中并取消选中复选框。然后我用创建的委托“clearCheckedItems”清除所有这些。此方法有一个循环,用于将未经检查的项添加到新Glist,并构建已删除索引的数组。

方法0,“beginUpdates”方法: 将一个indice列表传递给removeRows方法,但它崩溃了 对于“坏选择器”,NSLog显示在底部。

方法1,“reloadView”方法: 删除已检查的行,不会崩溃,但会留下持久的“已选中”复选框图形 是一个“幽灵”,它不再表示该表格单元格的状态。

 ////////////////  start of code //////////////////////////
 - (IBAction)clearCheckedItems:(id)sender {
 groceryList *myGroceryList  = [ groceryList sharedSingleton ];
 gList = [[NSMutableArray alloc] init ];
 gList = myGroceryList.myGroceryListS ;

int i;
NSMutableArray *checkedOffGlist = [[NSMutableArray alloc] init ];
NSMutableArray *removedIndexArray = [[ NSMutableArray alloc] init ];
for ( i=0 ; i < sizeOfList ; i++) {
    groceryItem *current = [ gList  objectAtIndex:i  ];
    if ( current.bought == (bool )NO  ) {
        [ checkedOffGlist addObject:current ] ;
    }  else {
        [ removedIndexArray addObject:[ NSNumber numberWithInt:i ] ] ;
    }
}

myGroceryList.myGroceryListS = checkedOffGlist   ;

//* update the table, clear all the check boxes *//
NSString *whichTableUpdate = @"beginUpdates";
  //* beginUpdates method *//
if  ( [whichTableUpdate isEqualToString:@"beginUpdates" ]) {    
    [ self.tableView beginUpdates];
    [ self.tableView deleteRowsAtIndexPaths:
          [NSArray arrayWithObject:removedIndexArray ]         
                  withRowAnimation:UITableViewRowAnimationAutomatic ];
    [ self.tableView endUpdates];
    // *** fails with message below *** //
} else {
    //* reloadView method *//       
    [ self.tableView reloadData   ];
    // *** does not crash, but leaves behind a persistent "checked" box icon.
}


}

2013-06-18 09:32:32.843 groceryList [5730:c07] *由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSArrayM行]:无法识别的选择器发送到实例0x717cb30' * 首先抛出调用堆栈:

.. cb30是指向已删除索引列表的指针,“removedIndexArray”。

所以...。如何获取行删除器的正确索引列表,或者我是否错误地运行行删除方法?

1 个答案:

答案 0 :(得分:0)

持久性复选框图标是因为reusableCells。如果您使用的是reusableCells,那么您需要将它们重置为“stock”,就像每次将它用于不同的单元格一样。

对于崩溃,您尝试使用整数删除indexPaths。 indexPath是一个路径(section和row)。在你添加int的地方,添加一个新创建的索引路径(我假设只有一个部分,所以它将是第0部分i)。如果您需要所有这些的代码示例,请告诉我。