Как мне создать графический интерфейс Cocoa для редактирования массива объектов NSDate? - PullRequest
2 голосов
/ 23 сентября 2010

В одном приложении, над которым я работаю, мне нужно разрешить пользователю редактировать список дат. У меня есть NSDate объекты в массиве, и я связал это с NSArrayController. Я связал NSTableColumn (единственный столбец в табличном представлении) с этим контроллером массива, используя путь ключа arrangedObjects.self. Это прекрасно работает - я получаю все даты, отображаемые в таблице, так, как я хочу, и я могу добавлять и удалять даты.

Беда в том, что я не могу редактировать даты в таблице. Если я пытаюсь получить исключение, сообщающее мне, что NSDate не соответствует кодировке ключ-значение ключу self, что, конечно, верно, метода setSelf: не существует.

У меня есть две идеи, как мне это решить:

  1. мой массив не должен хранить NSDate напрямую, но сначала поместите его в NSMutableDictionary или какой-либо другой объект.
  2. не позволяет пользователю редактировать дату напрямую, но заставит его удалить неправильную и повторно добавить исправленную дату.

Мне не очень нравятся оба решения. Мне не нравится первое, потому что я должен поместить вещи в свою модель, чтобы получить правильный графический интерфейс. И второе не очень удобно для пользователя.

Так у кого-нибудь есть идея, если есть третий и даже лучший способ решить эту проблему?

Обновление: временное решение

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

1 Ответ

1 голос
/ 23 сентября 2010

Обновлено

Кажется, что, поскольку NSDate не имеет свойств, которые вы можете установить (как с NSNumber), для «редактирования даты» вы должны заменить «старую» на вновь созданную. Дата должна быть свойством какого-либо другого объекта или части контейнера, например NSDictionary, для привязки NSDateFormatter и Cocoa для правильной работы.

Извиняюсь за прежний шум - мне всегда кажется, что я узнаю что-то новое, когда пытаюсь что-то, чего раньше никогда не пробовал. : -)

...