1

これは簡単に解決できる問題かもしれませんが、私は困惑しています。

背景:FetchedResultsControllerにリンクされている非常に単純なUITableViewがあります。基本的に、テーブルはFetchedResultsControllerの行ごとに1行を入力します。

問題の説明:アプリのボタンをクリックしてすべてのレコードを表示すると、アプリがクラッシュしてエラーが発生します

NSRangeException'、理由:' * -[_ PFBatchFaultingArray objectAtIndex:]:境界を超えたインデックス(2)(2)

ただし、データを追加するための画面を表示する別のボタンをクリックすると、何も保存せずにこの画面をキャンセルして、すべての画面の表示に戻り、画面は完全に正常に機能します。

以下に示すNSLogステートメントを使用してデバッグを試みました。

2012-06-01 23:37:01.345 TC[35258:fb03] sections : 1
2012-06-01 23:37:43.154 TC[35258:fb03] rows 3
2012-06-01 23:39:29.174 TC[35258:fb03] indexpath <NSIndexPath 0x91180f0> 2 indexes [0, 0]
2012-06-01 23:41:29.041 TC[35258:fb03] indexpath <NSIndexPath 0x903e770> 2 indexes [0, 1]
2012-06-01 23:41:44.015 TC[35258:fb03] indexpath <NSIndexPath 0x904afb0> 2 indexes [0, 2]
2012-06-01 23:41:46.598 TC[35258:fb03] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[_PFBatchFaultingArray objectAtIndex:]: index (2) beyond bounds (2)'

これは私を混乱させました-明らかに3行あるのに、なぜ3行目にエラーがスローされるのですか?あなたの助けと洞察は大歓迎です。ありがとうございました

4

1 に答える 1

0

問題と解決策を見つけました。これが起こっていたことです

  1. アプリケーションのメインメニューには、2つのボタンがあります。1つはデータベースに新しいアイテムを追加するためのもので、もう1つはデータベース内のすべてのアイテムを表示するためのものです。
  2. 上記のエラーは、最初に何かを追加しようとせずに、メインメニューからすべてのアイテムを直接表示した場合に発生していました。
  3. 追加画面に移動して追加画面をキャンセルすると、ManagedObjectContextでオブジェクトを作成していましたが、キャンセルしたときにオブジェクトを削除していなかったことに気付きました。したがって、システムは依然としてMamagedObjectsの3行をカウントしましたが、実際にはデータベースでコミットされたものは2つしか見つかりませんでした。
  4. 現在の管理対象オブジェクトをコンテキストから削除し、アプリをiOSシミュレーターから削除し、再コンパイルして実行するためのキャンセルボタンコードの行を追加しました。これは魅力のように機能します。

同じ問題が発生している可能性があります。次の手順を試して、問題が類似しているかどうかを確認してください

  1. シミュレーターからアプリを削除し、新しくコンパイルして実行します。それが正常に機能する場合は、コンテキストとデータベースの間に間違いなく競合があります
  2. 作成したがコミットしていない可能性のある管理対象オブジェクトを削除していることを確認してください。
于 2012-06-05T03:22:17.130 に答える