2012-06-15 11 views
9
2012-06-15 17:53:25.532 BadgerNew[3090:707] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[_PFBatchFaultingArray objectAtIndex:]: index (0) beyond bounds (0)' 
*** First throw call stack: 
(0x353f688f 0x3779d259 0x353f6789 0x353f67ab 0x35d5fee3 0x5a5c9 0x59fd3 0x43819 0x32e63c8b 0x38153 0x38309 0x32e63c8b 0x4142d 0x32e63c8b 0x32ec363d 0x32ec35db 0x32ec2f15 0x32ec2c49 0x35d21 0x32e62cab 0x32e5c7dd 0x32e2aac3 0x32e2a567 0x32e29f3b 0x36fe922b 0x353ca523 0x353ca4c5 0x353c9313 0x3534c4a5 0x3534c36d 0x32e5b86b 0x32e58cd5 0x35a73 0x35a54) 
terminate called throwing an exception(lldb) 

何が問題ですか?_PFBatchFaultingArray objectAtIndex:

メインで右にアボートします。だから私はどのラインがこれを引き起こすのかも知らない。

ヒント:シミュレータで実行します。私のiPhoneで実行します。私の友人のiPhoneで実行されません。

答えて

8

あなたはレリ任意の推測のための十分な情報を与えていない...しかし、ここであなたは以下のとおりです。

  1. はあなたがCoreData使用していますか?あなたのCoreDataにはデータが含まれていると思う人もいます。誰かが最初のオブジェクト(クラッシュレポートに記載されているインデックス0)に対してfetchedResultsController.fetchedObjectsを要求したときにクラッシュしますが、それは存在しません(クラッシュレポートの境界0を超えて)。
  2. "bound beyond bounds"はです。配列に関するメモエラー報告によると、誰かがarray(index 0)の最初の項目を要求していたが、その配列は空(bounds 0)だったという。それはクラッシュです。

にはと尋ねる前にデータがあることを確認してください。一つの方法は、とにかく

if ([myArray count] > index) 
    value = [myArray objectAtIndex:index]; 

をチェックすることです私の最高の推測では、PFBatchFaultingArrayはCoreDataを参照していることであり、それは簡単な答えが存在しないことを意味します。

認証失敗のため、CoreDataの更新は強制されましたが、FRCは引き続き古いデータを指していますか?前回と同じくらい多くのデータが残っていると思うが、CoreDataの「新しい」データの数は実際には少ないのですが、クラッシュが発生します。その後、自動的にUITableViewの更新が行のデータを要求していましたが、これはもはや存在しません==クラッシュ。だれかがデータを使用しようとする前にfrcsをリフレッシュする必要があります。そのリフレッシュがいつどこで行えるかは、あなただけが知っています。

9

私は理由を理解したと思います。それはNSFetchedResultsControllerのキャッシュの原因です。それは駄目だ。 NSSortDescriptorを昇順から降順に変更するだけでも、キャッシュを手動で削除する必要があります。

コンテキストが変更され、キャッシュがこれを認識しないと、それは気味悪くなり、表示されるようなエラーがスローされます。これは、Xcodeでビルドされたときに発生する可能性があります。コンテキストが保存されておらず、データが失われていますが、データがゼロで再起動したときにキャッシュがそうしなければならないと思っています。

キャッシュを削除すると、この問題は解決されます。私はこれがAppleがUICollectionViewControllerでの使用をやめた理由かもしれないと思う。ちょうどそのような問題。

EDIT:行/セクションがNSFetchedResultsControllerのそれぞれのカウントを超えていないかどうかを確認することはできません。なぜなら、データはそこにあるはずだと思うからです。

+1

キャッシュを手動で削除するにはどうすればよいですか? – Lytic

+0

NSFetchedResultsController.deleteCacheWithName() – powertoold

1

NSFetchRequestで "propertiesToFetch"を設定していて、それらのプロパティがデータベースでnilである場合は、このエラーも発生します。

この修正は、そのプロパティをオプションにすることであり、プリフェッチしません。

例:

'学生< --->バックパック' の場合は、お使いのモデルです。

バックパックがゼロの場合にクラッシュが発生します。

関連する問題