How does updating NSTableView from this mutable array work in Cocoa?

邮差的信 提交于 2019-12-12 04:09:47

问题


In my application, I have an NSTableView which should contain a list of files. I have a button that is used to open an dialog and programmatically add files to this list. For some time, I could not get the table view to update when I was adding files, as I was using the following code:

[self.newPackage.files addObject:fileURL];

It makes sense to me now that this doesn't work. As I understand it, the above line of code would be changing the mutable array "behind the controller's back."

I was able to piece together a working solution, largely from this question, with the following code:

NSMutableArray *bindingsCompliantArray = [[self valueForKey:@"newPackage"] mutableArrayValueForKey:@"files"];
[bindingsCompliantArray addObject:fileURL];

However, I don't understand how this works. bindingsCompliantArray is not used anywhere else either. I've looked at the documentation for mutableArrayValueForKey, but it's not making it any clearer. Is there anyone that could help explain how this is working?


回答1:


The ‑mutableArrayValueForKey: method returns a proxy array that you can treat as if it's the original array, with the added bonus that changes to the array are observed by any KVO observers watching the array.

NSController subclasses such as NSArrayController use Key-Value Observing to monitor changes to the objects they observe.

When you receive a proxy array via this method, NSMutableArray methods such as ‑addObject: will be noticed by observers, whereas with a standard array this is not the case.




回答2:


You are using the addObject method to update the array and I think that the trouble remains there. Try to update it by setting a NEW array with the new value. It should work! =D

Good luck!



来源:https://stackoverflow.com/questions/5236060/how-does-updating-nstableview-from-this-mutable-array-work-in-cocoa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!