2013-12-12 10 views
0

Я знаю, как связать NSTableView с NSArray через NSArrayController.Как связать NSTableView с пользовательским классом коллекции?

А как насчет привязки NSTableView к MyCustomCollection? Как выглядят привязки? Могу ли я использовать NSArrayController и просто соответствовать протоколу в MyCustomCollection? Или я должен использовать другой объект контроллера? Что нужно делать MyCustomCollection?

ответ

1

Трудно ответить полностью или конкретно, не зная намного больше о вашем классе коллекции. Практически наверняка создание собственного класса коллекций - это неправильная работа. Вы должны обязательно уточнить причины, по которым вы считаете это необходимым, и вашу реализацию. Будьте готовы рассмотреть, что ваши причины недостаточно хороши, чтобы оправдать забивание пользовательской коллекции в NSArrayController или что вы даже не можете делать именно то, что хотите (по крайней мере, так, как вы пытаетесь это сделать).

Также обратите внимание, что классы сбора какао (я думаю, все) являются членами class cluster. Это делает «делать это правильно» значительно более сложную задачу и делает подклассификацию существующего класса коллекции Cocoa «Bad Idea ™», если вы должны спросить, как («если вы должны спросить, что вы не готовы попробовать», тщеславие, хотя оправданный).

Я считаю, что до тех пор, как ваш класс реагирует на те же селекторы, как делает (по крайней мере) NSArray (если не NSMutableArray, если ваш класс является изменяемым), в том числе Key Value Coding collection accessor methods, это, вероятно, следует работать нормально. Поскольку ваша таблица (или, более вероятно, ее столбцы) привязана к контроллеру массива, эта часть должна работать одинаково. Поскольку NSArrayController наследует -content/-setContent: от NSObjectController, и эти методы принимают аргумент id, я полагаю, что он, вероятно, использует методы доступа KVC, на которые я ссылался, чтобы попасть в члены коллекции.

Но я могу ошибаться ... :-)

+0

Это было мое подозрение до сих пор: что лучше всего использовать имеющиеся инструменты, а не создавать собственные методы. Мой первый вопрос при изучении «NSArrayController»: «Что делать, если мои данные не так аккуратно хранятся в памяти?». Например, приложение чата, использующее 'NSTableView' для отображения истории чата, где история чата представляет собой объединение некоторых вещей в памяти и, если мы достаточно далеко доходим, из файла .txt. – tenfour

+0

Ваш случай все еще может быть легко представлен в памяти с использованием существующих классов Cocoa (включая классы коллекции) в очень обычном графе объектов. Если класс «message» имеет атрибут строки «text», атрибут «date», строка «from» (или ссылка на «пользовательский» класс со своей строкой «имя» и т. Д.), Тогда вы просто добавляете каждое «сообщение» в массив или изменчивый массив, а ваши элементы управления Cocoa затем привязаны к управляемым маршрутизированными ключами контроллера orposedObjects.user.name контроллера, чтобы получить данные. Так просто. Этому описанию не соответствует ваш случай. –

+0

Вышел из комнаты, но определенно изучите KVC/KVO, если вы еще этого не сделали. Я подозреваю, что вы еще не поняли, как пройти графический объект через коллекцию контроллера массива и «преследовать неимоверный орнитоид без причины», чтобы процитировать Commander Data. ;-) –

Смежные вопросы