0

私はOSXプログラミングに不慣れですが、一般的には気に入っています。私は次の問題を抱えています:

2つのコアデータエンティティがそれぞれのアレイコントローラーと1対多でリンクされています(ストックコントローラーと価格履歴コントローラー。後者のコントローラーはストックコントローラーにバインドされており、コントローラーキー=選択とモデルキーパス=価格履歴です。は、PriceHistoryControllerによって制御されるPriceDataPointエンティティに株式エンティティをリンクする関係です。

これはすべて私のUIの魔法のように機能し、株式を選択して、選択されたときにそれぞれに価格ポイントを追加/削除できます。ただし、これもプログラムで実行できる必要があります。

  1. [stockController add:self]'self'が正しいクラス/エンティティではない場合でも、選択したストックにリンクされた、正しいデフォルト値を持つ新しいオブジェクトでUIアップデートを呼び出すだけです。これは私にとって混乱の1つのポイントであり、私には理解できません(ストックコントローラーは、KVOバインディングを通じて選択された株式を認識しており、必要に応じて関係を設定する可能性が高いことを理解していますが、それがどのようにキャストされるかわかりません。 ''self'は、必要なオブジェクトタイプ(プレーンNSManagedObject)へのかなりランダムなクラスです?次に、これを行う場合、そのオブジェクトへの参照を取得して、その値を編集できるようにするにはどうすればよいですか?

  2. ただし、さらに重要なのは、Appleの例に従って、新しいNSManagedObjectスルーNSEntityDescription:insertNewObjectForEntity:を作成して使用すると[stockController addObject:Newly created Object]、追加する前に必要な値を書き込むことができますが、「親」ストックとの関係はaddObjects:メソッドによって設定されません。私もこれを書く方法を理解できると確信していますが、Cocoaの他のすべてがとてもエレガントであるため、これは奇妙に感じるので、ここの誰かがこれを非常に迅速に解決し、エレガントな方法を教えてくれることを願っています。

4

1 に答える 1

0

まず、CoreDataがCocoaBindingsメカニズム(特に配列コントローラーを提供する)で動作するように構築されており、Key Value Coding / KeyValueObservingメカニズムの上に構築されていることを述べて魔法を払拭しましょう。Core Dataのドキュメントには、これらのテクノロジーについて十分な知識があり、物事がどのように/なぜ機能しているのかを理解する必要があることが明確に示されています。

最初の問題では、NSArrayControllerの-add:メソッドに混乱しているとおっしゃいました。署名/プロトタイプを見ましたか?引数(自分自身を渡す場所)は(id)senderであり、これは基本的なアクションの特徴です(ドキュメントの「ターゲット/アクション」を参照)。自分自身、他のオブジェクト、または必要に応じてnilを渡すことができます。引数は、アレイコントローラーによって管理されるコレクションに追加するオブジェクトではありません。

2番目の問題では、物事をカスタマイズしたり、新しく挿入されたオブジェクトへの参照を保持したりする場合は、正しい方向に進んでいます。-addObject:メソッド(引数として追加するオブジェクトを取得します)を使用できますが、コントローラーを更新するには、アレイコントローラーに-fetch :(引数としてsenderを使用する別のアクション)を指示する必要があります。その内容にバインドされているもの(表/アウトラインなど)。

于 2010-06-26T14:58:47.273 に答える