0

NSFetchedResultsController オブジェクトの作成時に次のエラーが発生します

編集

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Subscriptions" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];

編集終了

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];


#0  0x977109c6 in __pthread_kill ()
#1  0x96296f78 in pthread_kill ()
#2  0x96287bdd in abort ()
#3  0x0022eb71 in uncaught_exception_handler ()
#4  0x024b70fc in __handleUncaughtException ()
#5  0x0264af0f in _objc_terminate ()
#6  0x052fb8de in safe_handler_caller ()
#7  0x052fb946 in std::terminate ()
#8  0x052fcab2 in __cxa_throw ()
#9  0x0264ade1 in objc_exception_throw ()
#10 0x00617f39 in -[NSFetchedResultsController initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:] ()

問題を探し始める必要があるアイデア。このエラーは何の役にも立ちません。

ブレークポイントを設定し、すでに入力をチェックしました init 関数には 2 つの入力があります。1 つは管理対象オブジェクトで、2 番目はフェッチ要求です。

以下の回答で言及されているのとは異なり、両方のオブジェクトが有効です。

** 解決策 ** Rog のおかげで、ソート記述子は必須のようです

4

1 に答える 1

3

実際、これは非常に役立つエラーです。Objective-C でプログラミングする場合は、これらのスタック トレースの読み取りに慣れる必要があります。

initWithFetchRequest に悪いものを与えたということです。実際、それは非常にひどかったため、例外がスローされました。さらに、std::terminate が呼び出され、最終的にプログラムが中止されたため、例外ハンドラがないことがわかりました。

例外を @catch して自分で処理して問題を確認するか、ブレークポイントを設定してすべての例外をキャッチすることもできます (objective-c では例外は実際には例外的であるため、良い提案です)。

ブレークポイント ペイン (左側、右矢印のようなアイコン) をクリックします。一番下に少し+があります。クリックして。「例外ブレークポイントの追加」を選択し、すべての例外がスローされた時点でブレークします。

これで、実際の例外を見ることができ、それがあなたを導きます。ほとんどの場合、フェッチ要求が正しく構成されていないことがわかります。また、不適切な MOC またはその他のパラメーターを入力した可能性もあります。

于 2012-08-14T19:52:55.510 に答える