Как обновление NSTableView из этого изменяемого массива работает в Какао? - PullRequest
0 голосов
/ 08 марта 2011

В моем приложении у меня есть NSTableView, который должен содержать список файлов.У меня есть кнопка, которая используется для открытия диалогового окна и программного добавления файлов в этот список.Некоторое время я не мог обновить табличное представление при добавлении файлов, так как я использовал следующий код:

[self.newPackage.files addObject:fileURL];

Теперь мне кажется, что это не работает.Насколько я понимаю, приведенная выше строка кода будет изменять изменяемый массив «за спиной контроллера».

Я смог собрать рабочее решение, в основном из этого вопроса со следующим кодом:

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

Однако я не понимаю, как это работает.bindingsCompliantArray также нигде не используется.Я посмотрел документацию для mutableArrayValueForKey , но это не делает его более понятным.Есть ли кто-нибудь, кто мог бы помочь объяснить, как это работает?

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Метод ‑mutableArrayValueForKey: возвращает прокси-массив, который можно обрабатывать так, как если бы он был исходным массивом, с дополнительным бонусом за изменения массива наблюдают все наблюдатели KVO, наблюдающие за массивом.

NSController подклассы, такие как NSArrayController, используют Наблюдение значения ключа для отслеживания изменений объектов, которые они наблюдают.

Когда вы получаете прокси-массив с помощью этого метода, наблюдатели заметят NSMutableArray методы, такие как ‑addObject:, тогда как со стандартным массивом это не так.

0 голосов
/ 10 марта 2011

Вы используете метод addObject для обновления массива, и я думаю, что проблема остается там.Попробуйте обновить его, установив новый массив с новым значением.Он должен работать!= D

Удачи!

...