Как заставить подкласс NSFormatter работать с ключом сортировки и селектором NSTableColumn? - PullRequest
1 голос
/ 22 апреля 2010

Моя настройка:

  • У меня есть база данных sqlite, из которой я заполняю NSMutableArray объектов NSDictionary, это источник данных для моего NSTableView.
  • Один из столбцов содержит «время», время - это число с плавающей запятой, которое содержит секунды.
  • Я хотел бы отобразить значения в этом столбце в виде минут: секунд. Например, мои данные будут 123.4329387. Я хочу отобразить 2:03, что у меня нет проблем с подклассом NSFormatter (или NSNumberFormatter), примененным к моему NSTextField в столбце.
  • У меня настроена сортировка с использованием атрибутов столбцов таблицы в IB, просто для ключа сортировки установлено значение «время», а для селектора установлено значение «сравнение:», которое прекрасно работает без средства форматирования.

В настоящее время это дает мне что-то подобное, когда я сортирую (по убыванию)

1: 37, 1:31, 0:10, 0:10, 0:09, 1:30, 1:30, 1:26, 0: 09

и подобная ерунда, похоже, что-то происходит, но определенно не отсортировано.

Как заставить сортировку смотреть на базовые данные вместо отформатированного значения? В качестве альтернативы, как я могу указать пользовательский метод сортировки и куда я могу поместить код для этого метода? Я много искал и не нашел ничего, что могло бы помочь мне с этой проблемой, любая помощь с этим наиболее ценится.

1 Ответ

1 голос
/ 29 апреля 2010

Оказывается, что при сортировке использовалось сравнение: из класса NSString, но при этом использовались базовые числовые данные. Я не совсем уверен, что здесь происходит, но мне удалось это исправить, создав собственный метод сравнения в категории NSString под названием «timeCompare». Затем в конструкторе интерфейса я просто поместил «timeCompare:» в поле селектора для столбца таблицы. Это заставляет его вызывать мой пользовательский метод сравнения, из которого я только что преобразовал строки, заданные в NSNumbers, и вызову сравнивать: на них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...