TableView reloadData在UITableViewCell中重新启动NSTimer

时间:2014-06-11 18:38:16

标签: ios uitableview nstimer reloaddata

我有UITableView个自定义单元格。每个单元格都有一个NSTimer,可以由用户设置,并通过点击按钮启动。除了将新单元格添加到TableView之外,计时器才起作用。在unwind方法(来自为新单元格创建新对象)中,我必须重新加载TableView中的数据,以便显示新单元格。但是,这会重新加载所有单元,导致任何正在运行的计时器重新启动有没有办法可以在不重新启动运行计时器的情况下添加单元格?

修改

我有一个ViewController创建一个新对象,然后回到FirstViewController.m我有一个unwind方法,该方法应该用新对象的行更新tableView。使用reloadData方法无法正常工作,因为它会重新加载所有单元格。我想在不重新加载整个tableView的情况下添加一个新单元格。

-(IBAction)unwind:(UIStoryboardSegue *)segue {
    ABCAddItemViewController *source = [segue sourceViewController];
    ABCItem *item = source.object;

    if (item != nil) {
        [self.objectArray addObject:item];

        [self.tableView reloadData];
    }
}

为此,我尝试添加这些行而不是[self.tableView reloadData]

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[self.objectArray indexOfObject:item] inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];

然而,应用程序崩溃了,我收到了这条消息:

'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (1) 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 (1 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'

tableView中的行数由[self.objectArray count]方法中的numberOfRowsInSection:确定。

2 个答案:

答案 0 :(得分:1)

将定时器添加到单元格并不是一个好主意,因为它们可以重复使用。他们是意见。我的建议是创建一些对象,这些对象具有要在这些UITableViewCells中显示的文本/信息,并将计时器添加到这些对象。这样,定时器信息不会存储在单元格中,它们将存储状态

答案 1 :(得分:1)

无需重新加载整个表格即可插入一个单元格。您可以添加像

这样的单元格
self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:section]] withRowAnimation:UITableViewRowAnimationLeft];
[self.tableView endUpdates];