我有一个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:
确定。
我该如何使这项工作?或者有更好的方法吗?
答案 0 :(得分:0)
错误表示您的界面更新需要显示2行,但您的数据源在更新后仅包含1行。
您的“item”对象是否为[NSNull null]
值?
如果item为if(item != nil)
值,则行[NSNull null]
可以等于true。
你可以试试这个额外的支票吗
if(item != nil && item != [NSNull null])
{
...
}
或者使用断点和调试器打印出item的值:
lldb> po item