0

行を削除しようとしているセクションを含む UITableView があります。BubbleWrap から AFMotion に切り替えると、不変の配列エラーがいくつか発生し始めました。通常、ビュー コントローラーをプッシュする前に、変更するオブジェクトに mutableCopy を追加することで修正できます。ただし、セクションを含むテーブルの場合、凍結/不変配列エラーを回避できますが、NSInternalInconsistencyException: Invalid update: invalid number of rows in section 0. これらに関する他の質問を見てbeginUpdatesendUpdates、 などを追加しようとしましたが、それでもうまくいきません。

私のデータオブジェクトは、次のようなハッシュです。

{
  "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
4

1 に答える 1

0

どういうわけか、dataSource の正しいインスタンスを参照していないようです。それを割り当てている場所、つまりtableView.dataSource = dataも のコードも表示しませんrows_for_section。と関係があるのか​​気になり.mutableCopyます。それは何らかの理由で必要ですか?

私のアプリでは、dataSource を tableView から直接取り込みtableView.dataSourceます。

于 2013-06-27T20:03:38.777 に答える