0

CoreDataについて質問があります。アプリケーションを開始するとき、データ(Core Dataによって自動的に保存される)はいつNSArrayControllersにロードされますか?ユーザーが操作する前に、最初に変更したいと思います。

具体的には、エンティティプレイリスト用のNSArrayControllerがあります。ユーザーが新しいプレイリストを追加したり、アプリを操作したりする前に、プログラムでプレイリストを変更したいと思います。windowControllerDidLoadNib:NSPersistentDocument(MyDocument.m)と、NSPersistendDocumentとNSArrayControllerの両方で試しましたawakeFromNibが、これらのメソッドをチェックインすると[[myArrayController arrangedObjects] count]、結果として0が返されます(アレイコントローラーのコンテンツは空です)。

しかし、私は実際にデータを保存していて、それがユーザーに表示されています。そもそもいつどこで変更できるのかわからない。

助けてくれてありがとう。

4

2 に答える 2

1

データがNSArrayControllerに「ロード」されることはありません。アレイコントローラは、アレイ自体ではありません。データが含まれていないか、保存されていません。

代わりに、配列コントローラーは、特定のデータが必要な場合にのみ、バインドされているオブジェクトに特定のデータを照会します。これは、管理対象オブジェクトが属性にアクセスされたときにのみ完全にインスタンス化されるCoreDataに特に当てはまります。配列コントローラーは、データを配列タイプのデータ構造から別のオブジェクト(通常はUI要素)に移動します。

UIに表示される前に既存のストアを変更する場合は、UIで使用されるアレイコントローラーが初期化される前にデータを処理する必要があります。を使用している場合は、ドキュメントを最初に開いたときに、NSPersistentDocumentオーバーライドreadFromURL:ofType:error:してすべてのオブジェクトをフェッチおよび変更できます。windowWillLoadまたは、ウィンドウコントローラまたはshowWindowメソッドをオーバーライドすることもできます。

どこで行うかに関係なく、変更するすべての管理対象オブジェクトをフェッチする必要があります。これを行うためにプログラムで配列コントローラーを作成することもできますが、変更するオブジェクトが多数ある場合は、フェッチ要求を細かく管理する方が簡単です。

于 2010-08-04T11:35:32.523 に答える
0

コントローラの「arrangedObjects」キーパスを監視し、アレイコントローラに初めてデータが入力されたことを確認するロジックを追加してみてください。

もう1つの可能なフックは、管理対象オブジェクトのawakeFromInsert/awakeFromFetchメソッドを実装することです。

于 2010-08-04T10:33:52.057 に答える