基になる配列を更新するメソッドが呼び出されたときに、NSArrayController にバインドされた tableView を更新するにはどうすればよいですか? 例はこれを明確にするかもしれません。
アプリケーションが起動すると、SubwayTrain が作成されます。SubwayTrain が初期化されると、単一の SubwayCar が作成されます。SubwayCar には可変配列「passengers」があります。地下鉄の車両が初期化されると、乗客の配列が作成され、いくつかの People オブジェクトが配置されます (「切符売り場」という名前の人と「ホームレスの男性」という名前の別の人を考えてみましょう)。これらの人は常に SubwayCar に乗っているので、初期化時にそれらを作成し、乗客配列に追加します。
アプリケーションの存続期間中、人々は車に乗り込みます。「addPassenger」は SubwayCar で呼び出され、人が引数として渡されます。
私は、subwayTrain.subwayCar.passengers にバインドされた NSArrayController を持っており、起動時に私のチケット コレクターとホームレスの男性が正常に表示されます。しかし、[subwayCar addPassenger:] を使用すると、tableView が更新されません。乗客が確実に配列に追加されていることを確認しましたが、GUI では何も更新されません。
私は何を間違っている可能性がありますか?私の本能は、それがKVOに関連しているということです-配列コントローラーは、addPassengerが呼び出されたときに更新することを知りません(addPassengerが[passengers addObject:]を呼び出しても)。
喜んで手伝ってくれる人に感謝します。
アップデート
したがって、addPassenger メソッドを
[seatedPlayers addObject:person];
に
NSMutableSet *newSeatedPlayers = [NSMutableSet setWithSet:seatedPlayers];
[newSeatedPlayers addObject:sp];
[seatedPlayers release];
[self setSeatedPlayers:newSeatedPlayers];
これは、[self setSeatedPlayers] を使用しているためだと思います。これは正しい方法ですか?配列をコピーし、古い配列を解放し、コピーを更新するのは (既存の配列に追加するだけではなく) 非常に面倒に思えます。