行を削除しようとしているセクションを含む 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