2

私のコアデータモデルには、Courseエンティティの「tomany」関係を持つPersonエンティティがあります(Course to Personの逆の「toone」関係もあります)。

これで、NSFetchedResultsControllerを使用して正常に機能するPersonオブジェクトを表示するサブクラス化されたUITableViewControllerができました。Personをクリックすると、NSFetchedControllerを使用してPersonに関連付けられたコースを表示する別のサブクラス化されたUITableViewControllerを公開するように設定しました。

問題:Personをクリックして、Course UITableViewControllerを表示しようとすると、この例外が発生します...

"Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath name not found in entity <NSSQLEntity Course id=2>'"

解決またはトラブルシューティングの方法に関するアイデアはありますか?

2つのViewController間のコードは、NSFetchedResultsControllerが1つの「Person」エンティティと別の「Course」エンティティ用に構成されていることを除いて、ほぼ同じです。

4

2 に答える 2

2

このエラーは、NSFetchedResultsController を定義するために使用するキーパス (おそらく関係) がデータ モデルに存在しないことを意味します。これらのエラーは、多くの場合、述語とソート定義で発生します。

どこかで "person.course.someattribute.somerelationship" のようなパスを取得しましたが、モデルでは person.course.somerelationship を取得しました。または、単にキー名などのスペルを間違えた可能性があります。

于 2010-03-07T23:18:46.997 に答える
0

最初のビュー コントローラーで取得した Person オブジェクトに 2 番目のビュー コントローラーでアクセスしますか? その場合は、次のように、最初の executeFetchRequest に明示的な保持を入れます。

[[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0] retain];

これは、executeFetchRequest が autorelease オブジェクトを返すためです。だから、あなたはそれを保持しなければなりません。お役に立てば幸いです。

于 2010-03-07T23:19:55.700 に答える