Использование DifferentUnionOfObjects с NSArrayController и NSTableView - PullRequest
1 голос
/ 26 июня 2011

У меня проблемы с фильтрацией содержимого NSArrayController и привязкой его к столбцам NSTableView.

На самом деле у меня есть форма, которую я использую для генерации счетов для нашихклиентов.Для этого у меня есть массив с именем Customer, и я могу собирать там информацию о каждом клиенте.

Теперь я хочу показать всем нашим клиентам, используя NSTableView, и, конечно, мне нужно, чтобы он дублировался.свободно.Я знаю, что могу использовать @distinctUnionOfObjects для создания уникального массива клиентов, но это не сработало в меню Инспектора привязок Interface Builder.Когда я использую ключ контроллера: arrangedObjects и путь к ключу модели: @distinctUnionOfObjects.customerName, я получаю сообщение об ошибке, сообщающее, что объект не соответствует KVC !!!

2011-06-28 00:22:03.212 FinancingPro[459:903] [<NSManagedObject 0x10053e1a0> valueForUndefinedKey:]: the entity Customer is not key value coding-compliant for the key "@distinctUnionOfObjects".

Возможно distinctUnionOfObjects не являетсяправильный путь!

Как получить NSTableView с уникальными параметрами?

1 Ответ

2 голосов
/ 28 июня 2011

Когда я использую ключ контроллера :ранжированный объект и путь к ключу модели: @ diverUnionOfObjects.customerName, я получаю сообщение об ошибке, сообщающее, что объект не соответствует KVC !!!

2011-06-28 00:22:03.212 FinancingPro[459:903] [<NSManagedObject 0x10053e1a0> valueForUndefinedKey:]: the entity Customer is not key value coding-compliant for the key "@distinctUnionOfObjects".

Вы привязаны к объекту модели, а не к контроллеру массива. arrangedObjects - это свойство контроллера массива, а @distinctUnionOfObjects - это специальный ключ, поддерживаемый только массивами и наборами, поэтому вам необходимо привязать его к контроллеру массива.

Обратите внимание, что ваш фильтр @distinctUnionOfObjects будет применяться только к этому столбцу, но не к другим столбцам. Таким образом, вы фильтруете только имена клиентов, а не самих клиентов. Это очень вероятно неправильно; вы по-прежнему сможете иметь несколько клиентов с одним и тем же именем в модели, и когда вы это сделаете, табличное представление либо вывернется (потому что вы дали ему несколько столбцов разной длины), либо покажет, что фактически является мусором ( неправильные имена, потому что они смещены вверх относительно других столбцов).

Кроме того, предположим, что у вас есть табличное представление только с столбцом имени, например списком источников, и вы применили эту фильтрацию к нему. Затем, когда у вас есть дубликаты клиентов, приложение покажет только одного из них, и оно будет случайным. Если пользователь удалит этого клиента, появится другой (или один из остальных); это будет выглядеть так, как если бы удаление не удалось («Я удалил Джона Смита, но Джон Смит все еще появляется в списке!»).

Если вы намереваетесь запретить нескольким клиентам с одним и тем же именем делать это, когда клиенты вводятся или изменяются с помощью Проверка значения ключа , и удалите это ограничение вывода в табличном представлении. Если каким-то образом ваш пользователь получит в свою базу данных несколько пользователей с одним и тем же именем, вы не захотите, чтобы ваше приложение сошло с ума.

Необходимо предотвращать дублирование при вводе, а не при выводе.

...