6

Core Data のドキュメントを見て、すべての UITableViewControllers からアクセスできるように Core Data Stack を配置する方法を見つけようとしています。Apple が提供するすべての例は、これが AppDelegate に実装されることを示していますが、ドキュメントでは、このアプローチは畝が強すぎるため推奨されていません! リンクを参照してください。

(なぜこれが iPhone SDK ドキュメントに記載されていないのかは別の謎です)

私の問題は、TopSongs に示されている Core Data の例に従ってデザイン パターンを繰り返し、子テーブル ビューの ManagedObjectContext エンティティを取得したところ、次のエラーが発生したことです。エンティティ名 'Song' の NSManagedObjectModel が見つかりませんでした。奇妙なことに、これは親のテーブル ビューで見つけることができるので、AppDelegate のコア データ スタックが解放されているためだと推測します。

Recipies、CoreData Books、および Locations で作成されたものとは異なる設計パターンに従う良い例を知っている人はいますか? これらはすべて同じパターンに従います。

私がやりたいのは、元のデータを取得することだけで、並べ替えはchidテーブルビューの異なる基準で行われます。

4

3 に答える 3

4

この質問では、Core Data スタックをどこに配置することを好むかについて、重要な議論があります。私はシングルトン内にスタックを配置する傾向があります (そこに示されているように)。これにより、アプリケーション内の必要な場所にあるスタックに簡単にアクセスできます。

あなたの問題に関する限り、コア データ スタックの要素が割り当て解除されている可能性は非常に低いと思います。1 つには、現在のレポートを取得するのではなく、コンテキストまたはモデルにメッセージを送信するときにクラッシュする可能性があります。アプリケーションの別の場所から "Song" エンティティにアクセスできる場合、それを必要とするインスタンスにモデルまたはコンテキストを適切に渡していないことは間違いありません。

于 2009-12-15T18:22:01.017 に答える
1

IIRC Apple の例は App Delegate のコア データ スタックを初期化しますが、実際には View Controller にプロパティをセットアップして ManagedObjectContext を参照し、アプリケーションのロード時にそれらを設定します。 App Delegate から直接 ManagedObjectContext をロードしようとするのではなく、

コードを投稿すると、エラーで何が起こっているのかを理解するのがずっと簡単になります。最初に確認することは、コントローラーの ManagedObjectContext への参照が nil でないことです。

于 2009-12-15T16:04:51.860 に答える
0

ここでの問題は、オブジェクト モデルで曲という名前のエンティティを宣言していないためです...あなたが従っているパターンはそれとは何の関係もありません...ここでコア データとオブジェクト モデルを読むことをお勧めします。それがあなたを助けることを願っています

于 2009-12-15T16:04:41.733 に答える