0

テーブルビューにアイテムを追加するための一般的なパターンであると私が信じているものを使用しています-

  • メインコントローラーはモーダルコントローラーを作成し、それ自体をデリゲートとして登録します
  • モーダルView Controllerが表示されます
  • ユーザーがいくつかのデータを提供し、モーダルのナビゲーション バーで保存ボタンを押す
  • モーダルビューコントローラーは、入力された詳細を含むメッセージをデリゲートに送信します
  • 元のコントローラーはメッセージを受け取り、モーダルを閉じます
  • 元のコントローラがデータ モデルを更新し、そのテーブルビューに新しい行を挿入します

これは、1 つの特定のシナリオを除いてうまく機能しています。

モーダルが表示されているときにデバイスを回転させると、モーダルを閉じた後にアプリがクラッシュします。新しい行は正しく挿入されますが、その後すぐに失敗します:

*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], 

/SourceCache/UIKit_Sim/UIKit-2380.17/UITableView.m:1070
2013-07-28 17:28:36.404 NoHitterAlerts[36541:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (8) must be equal to the number of rows contained in that section before the update (8), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'

なぜこれが起こるのか、一生理解できません。提示されたモーダルで回転すると、一貫して機能するテスト ケースが失敗します。アニメーションで行を挿入する代わりに、テーブルビューをリロードするだけで問題なく動作することに気付きました。

これは、同じ問題を示す必要最小限のプロジェクトです: デモ プロジェクト

  1. iPhone sim でプロジェクトを実行する
  2. リストに項目を追加 - 正常に動作します
  3. 最初の画面に戻り、横向きに回転
  4. 同じテストを再度実行します。まだ動作します。
  5. 最初の画面に戻り、モーダルを起動します。モーダルがまだ表示されている間にシミュレーターを回転させます。「アイテムを追加」を押します。クラッシュします。

ここで何が起こっているのかについてのアイデアはありますか?

4

1 に答える 1