当更新基础数组的方法被调用时,我需要做什么来更新绑定到NSArrayController的tableView?一个例子可能会澄清这一点。NSArrayController和KVO
当我的应用程序启动时,它会创建一个SubwayTrain。当SubwayTrain初始化时,它会创建一个SubwayCar。 SubwayCar有一个可变数组'乘客'。当一辆地铁车辆被初始化时,乘客阵列被创建,并且放入一些People对象(比如说一个名为“收票员”的人和一个名为“无家可归的人”的人)。这些人总是在SubwayCar上,所以我在初始化时创建它们并将它们添加到乘客阵列中。
在应用程序的生命中,人们登上汽车。在SubwayCar上调用addPassenger,并将其作为参数传入。
我有一个NSArrayController绑定到subwayTrain.subwayCar.passengers,并在推出时,我的门票收藏家和无家可归的人显示罚款。但是当我使用[subwayCar addPassenger:]时,tableView不会更新。我已经确认,乘客肯定会加入阵列,但没有更新的gui。
我可能会做错什么?我的直觉是它与KVO相关 - 当addPassenger被调用时,数组控制器不知道更新(即使addPassenger调用[passengers addObject:]。我在这里会发生什么错误 - 如果它有帮助,我可以发布代码。
由于任何人愿意帮忙。
UPDATE
所以,事实证明我能得到这个由addPassenger方法改变从
[seatedPlayers addObject:person];
工作
NSMutableSet *newSeatedPlayers = [NSMutableSet setWithSet:seatedPlayers];
[newSeatedPlayers addObject:sp];
[seatedPlayers release];
[self setSeatedPlayers:newSeatedPlayers];
我想这是因为我正在使用[self setSeatedPlayers]。这是做到这一点的正确方法吗?复制数组,复制旧数据并更新副本(而不是仅添加到现有数组)似乎非常麻烦。
如何将表视图绑定到控制器?你有没有将每个表列绑定到'subwayTrain.subwayCar.passengers'属性(例如,列名绑定到'subwayTrain.subwayCar.passengers.name')? – outis 2010-01-15 03:59:50
是的。旅客名单在启动时显示。 – 2010-01-15 04:32:30