当我的应用程序启动时,它会创建一个SubwayTrain。当SubwayTrain被初始化时,它会创建一个单独的SubwayCar。SubwayCar有一个可变数组'passengers'。当一个Subway car被初始化时,乘客数组被创建,并放入一些People对象(比如一个名为"ticket collector"和另一个名为"homeless guy"的人)。这些家伙总是在SubwayCar上,所以我在初始化时创建它们并将它们添加到乘客数组中。
在应用程序的生命周期中,人们会上车。在SubwayCar上调用'addPassenger',并将人作为参数传递进去。
我有一个绑定到subwayTrain.subwayCar.passengers的NSArrayController,在启动时我的售票员和无家可归的人都很好地显示出来了。但是当我使用[subwayCar addPassenger:]时,tableView没有更新。我已经确认乘客肯定被添加到了数组中,但在GUI中没有更新任何内容。
我可能做错了什么?我的直觉是与KVO有关——即array controller不知道在调用addPassenger时更新(即使addPassenger调用[passengers addObject:])。我在这里可能错了什么——如果有帮助,我可以发布代码。
感谢任何愿意帮忙的人。
更新
所以,事实证明我可以通过将addPassenger方法从原来的形式更改为:
[seatedPlayers addObject:person];
to
NSMutableSet *newSeatedPlayers = [NSMutableSet setWithSet:seatedPlayers];
[newSeatedPlayers addObject:sp];
[seatedPlayers release];
[self setSeatedPlayers:newSeatedPlayers];
我猜这是因为我使用了[self setSeatedPlayers]。这样做正确吗?这似乎非常麻烦,需要复制数组,释放旧数组,并更新副本(而不是仅添加到现有数组中)。
subwayTrain.subwayCar.passengers
属性的一个属性(例如,名称列绑定到subwayTrain.subwayCar.passengers.name
)? - outis