2010-12-12 11 views
0

iOSアプリケーションでCoreDataを使用して、ロケーションオブジェクト(名前、座標)の単純なリストを保存しています。 CoreDataレコードが破損しているように見えるメモリ警告の後、私は今度は2回状況に遭遇しました。CoreData:セクション内のnumberOfObjectsが正しくありません

具体的には、(のtableViewで:numberOfRowsInSection :)のtableViewに続い部== 0

ため

NSUInteger numObjects = [[[fetchedResultsController sections] objectAtIndex:section] numberOfObjects]; 

戻り4(::) cellForRowAtIndexPath

aLocation = [fetchedResultsController objectAtIndexPath:indexPath]; 

indexPathします[ 0,3]例外を生成します。

NSRangeException:* - [_ PFArray objectAtIndex:]:境界を越えたインデックス(3)

つまり、CoreDataにはテーブルに4つの行がありますが、テーブルビューのリクエスト時には最後の行のオブジェクトを返すことはできませんそれ。

つの質問:これが発生する可能性があり、どのようにそれ

2)それが発生した後は、コード内のデータの問題を解決するための任意の手段があるのを防ぐためにどのように

1)任意の考え?

おかげ

スティーブン

答えて

2

問題が原因となったCoreDataキャッシュにいくつかの矛盾しているように見えますこれは、述語が決して変更されないので、それを引き起こす原因は不明です。私は、fetchedResultsControllerの最後のオブジェクトにアクセスする際に例外が発生した場合、deleteCacheWithNameを呼び出すことになりました。これは問題を解決しているようです(6ヶ月以内にこの問題は発生しません)。

0

多分あなたは、メモリの警告[fetchedResultsController performFetch](単なる推測)の後にフェッチやり直す必要

+0

こんにちはHarald - あなたは正しいかもしれませんが、処理されない例外の後にアプリケーションを再起動した後でのみ破損が明らかになりました。面白いことに、質問を投稿した後、セクション内のnumberOfObjectsの相違は、次のようになりました。 NSManagedObjectContextで保存を行った後に修正されました。 – StephenT

0

私自身も同じ問題がありました。私は完全に調査する時間がありませんでしたが、私はビューに呼び出すたびに異なるスクラッチmanagedObjectContextでFetchControllerを設定していました。

cacheNameをnilに設定すると、私の問題が解決しました。データの量が少なくてもキャッシュを持たない問題はあまりありませんでした。

関連する問題