我有一个UITableView,其中包含我正在尝试删除行的部分。从BubbleWrap切换到AFMotion时,我开始收到一些不可变的数组错误。通常可以通过在推送其视图控制器之前在我正在改变的对象上附加mutableCopy来修复它们。但是,对于包含节的表,我会超过冻结/不可变数组错误但得到NSInternalInconsistencyException: Invalid update: invalid number of rows in section 0
。我已经看到了有关这些问题的其他问题,并尝试添加beginUpdates
,endUpdates
等,但它仍然无效。
我的数据对象是一个如下所示的哈希:
{
"Items" => ["one", "two", "three"],
"More" => ["four", "five", "six"]
}
我在呈现时将数据传递给新控制器:
def tap_items(sender)
controller = ItemsController.alloc.initWithNibName(nil, bundle:nil)
controller.data = @data[:items].mutableCopy
self.presentViewController(
UINavigationController.alloc.initWithRootViewController(controller),
animated:true,
completion: lambda {}
)
end
然后在ItemsController
中,我的表被设置为删除具有以下内容的行:
def tableView(tableView, commitEditingStyle:editingStyle, forRowAtIndexPath:indexPath)
if editingStyle == UITableViewCellEditingStyleDelete
rows_for_section(indexPath.section).delete_at indexPath.row
tableView.deleteRowsAtIndexPaths([indexPath],
withRowAnimation:UITableViewRowAnimationFade)
end
end
但是会引发内部不一致异常错误。我也尝试过data[sections[indexPath.section]].delete_at indexPath.row
而不是rows_for_section(indexPath.section).delete_at indexPath.row
。但这并没有改变任何事情。
更新:这是我的tableView
的代码def viewDidLoad
super
@table = UITableView.alloc.initWithFrame(self.view.bounds)
@table.autoresizingMask = UIViewAutoresizingFlexibleHeight
self.view.addSubview(@table)
@table.dataSource = self
@table.delegate = self
end
def sections
data.keys.sort
end
def rows_for_section(section_index)
data[self.sections[section_index]].mutableCopy
end
def row_for_index_path(index_path)
rows_for_section(index_path.section)[index_path.row]
end
def tableView(tableView, titleForHeaderInSection:section)
sections[section]
end
def numberOfSectionsInTableView(tableView)
self.sections.count
end
def tableView(tableView, numberOfRowsInSection: section)
rows_for_section(section).count
end
答案 0 :(得分:0)
听起来好像你没有引用dataSource的正确实例。您不会显示分配的位置,即tableView.dataSource = data
,也不会显示rows_for_section
的代码。我想知道它是否与.mutableCopy
有关。这是出于某种原因吗?
在我的应用中,我直接从tableView中引入dataSource,即tableView.dataSource
。