在不使用reloadData的情况下向UITableView添加行

时间:2014-06-17 19:41:08

标签: ios objective-c uitableview reloaddata nsindexpath

我有一个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];

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

  

无效更新:第0部分中的行数无效   更新(1)后必须包含在现有部分中的行   等于之前该部分中包含的行数   更新(1),加上或减去插入或删除的行数   该部分(1个插入,0个删除)和加号或减号的数量   移入或移出该部分的行(0移入,0移出)。

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

我该如何使这项工作?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

错误表示您的界面更新需要显示2行,但您的数据源在更新后仅包含1行。

您的“item”对象是否为[NSNull null]值?

如果item为if(item != nil)值,则行[NSNull null]可以等于true。

你可以试试这个额外的支票吗

if(item != nil && item != [NSNull null])
{
    ...
}

或者使用断点和调试器打印出item的值:

lldb> po item
相关问题