1

CoreDataを使用するアプリケーションを開発しています。ビューには、NSFetchedResultsControllerを使用するUITableView(約50要素を含む)が含まれています。また、WSコール(新しいマネージドオブジェクトコンテキストを持つ別のスレッド)の後に格納されたデータをリフレッシュすることを可能にする「Pull to refresh」もあります。iOS4のNSFetchedResultsController問題

iOS5ではすべて正常に動作しています。「Pull to refresh」を実行すると、データベースとテーブルビューが更新されます。しかし、iOS4には問題があります。

2012-02-29 11:56:09.119 Nanopost[1996:207] *** Terminating app due to uncaught exception  'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x5c3c760 <x-coredata://E176B0A1-275B-4332-9231-49FD88238C2B/Ads/p231>'' 
*** Call stack at first throw: 
(
0 CoreFoundation      0x02bfe919 __exceptionPreprocess + 185 
1 libobjc.A.dylib      0x02e595de objc_exception_throw + 47 
2 CoreData       0x028b833f _PFFaultHandlerLookupRow + 1407 
3 CoreData       0x028b5ee3 _PF_FulfillDeferredFault + 499 
4 CoreData       0x028b9f3f _sharedIMPL_pvfk_core + 95 
5 CoreData       0x0292a010 _PF_Handler_Public_GetProperty + 160 
6 Foundation       0x02442c4f -[NSSortDescriptor compareObject:toObject:] + 128 
7 CoreData       0x0297db5e +[NSFetchedResultsController(PrivateMethods) _insertIndexForObject:inArray:lowIdx:highIdx:sortDescriptors:] + 286 
8 CoreData       0x0297e1b2 -[NSFetchedResultsController(PrivateMethods) _postprocessInsertedObjects:] + 402 
9 CoreData       0x029841bc -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:] + 1804 
10 Foundation       0x02380c1d _nsnote_callback + 145 
11 CoreFoundation      0x02bd6cf9 __CFXNotificationPost_old + 745 
12 CoreFoundation      0x02b5611a _CFXNotificationPostNotification + 186 
13 Foundation       0x023767c2 -[NSNotificationCenter postNotificationName:object:userInfo:] + 134 
14 CoreData       0x028c0519 -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:] + 89 
15 CoreData       0x028f802b -[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:] + 1579 
16 Foundation       0x02395e9a __NSThreadPerformPerform + 251 
17 CoreFoundation      0x02bdfd7f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15 
18 CoreFoundation      0x02b3e2cb __CFRunLoopDoSources0 + 571 
19 CoreFoundation      0x02b3d7c6 __CFRunLoopRun + 470 
20 CoreFoundation      0x02b3d280 CFRunLoopRunSpecific + 208 
21 CoreFoundation      0x02b3d1a1 CFRunLoopRunInMode + 97 
22 GraphicsServices     0x031e62c8 GSEventRunModal + 217 
23 GraphicsServices     0x031e638d GSEventRun + 115 
24 UIKit        0x0063cb58 UIApplicationMain + 1160 
25 Nanopost       0x0000230a main + 170 
26 Nanopost       0x00002255 start + 53 
) 
terminate called after throwing an instance of '_NSCoreDataException' 

私は「NSFetchRequestを初期化:アプリケーションが起動される(テーブルビューは、すべてのデータベースレコードが含まれている)が、私は「リフレッシュするためにプル」を実行すると、私は次のエラーを持っているとき、最初の「performFetchは」作品FetchBatchSize」、私はセット "iOS4を、私ドンに

[l_FetchRequest setFetchBatchSize:25]; 

...これ以上のクラッシュ:25にFetchBatchSize ""(ランダム)20に

[l_FetchRequest setFetchBatchSize:20]; 

をしかし、私は設定している場合" 〜しないなぜこの問題を理解したいのか分かりません:)私はこの行が本当の問題だとは思わない。多分それは別の問題をどこかに示しているでしょうか?

ご回答いただきありがとうございます。

トーマス

答えて

0

異なるコンテキストを使用する理由はありますか?私は私のものを変えないし、私はかなり似たようなサウンドのアプリを持っている。私はそれを使用して(私はiOSの4で実行していないのですが)すべての問題を持っていなかった

http://www.stanford.edu/class/cs193p/cgi-bin/drupal/node/289

:あなたが比較可能性

ことの一つは、この非常に便利CoreDataTableViewControllerです。あなたはfetchedResultsControllerをどのように接続したのかを比較するかもしれません。

もう1つの点 - 例外が発生するとすぐにデバッガをプッシュするキャッチオールブレークポイントはありますか?そうでない場合は、それを追加します(ブレークポイント、+を追加するには、「例外ブレークポイントの追加」とデフォルトを維持します)。そうすれば、例外を発生させる行のすぐ上にデバッガが置かれます。これは便利なはずです。

幸運、

ダミアン

+0

こんにちはダミアンとあなたの答えをありがとう! アップルのドキュメント(別のスレッド=別の管理対象オブジェクトのコンテキスト)によると「ベストプラクティス」と思われるため、私は別のコンテキストを使用します。 "例外ブレークポイント"を追加しようとしました。残念ながら、例外はmain.mファイルにスローされるので、この問題の手掛かりを得るのは容易ではありません。 Thomas –

+0

main.mの例外は、スタック全体を処理して解凍しなかったことを意味します。あなたの例外ブレークポイントはスローされるとすぐに発生します - 動作するまで再試行してください。プログラムが壊れたときの正確な位置を確認するための鍵です。 –

関連する問題