Разработка пользовательского NSTextView - PullRequest
0 голосов
/ 06 октября 2011

Мне нужно спроектировать собственное текстовое представление, которое отображает журналы, которые создает мое приложение. Журналы имеют конкретный упакованный двоичный формат, каждая запись включает в себя ряд полей, помимо фактической строки (уровень журнала, дата, источник). Теперь эти журналы могут быть огромными, сотни мегабайт данных. Мне нужно реализовать такие функции, как быстрая фильтрация, основанная на типе / источнике сообщений, поиске, управлении макетом памяти и т. Д. Поскольку NSTextView поддерживает большинство из этих функций, я решил начать с этого.

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

Я посмотрел на NSTextStorage, и он советует перегрузить -string, что не совсем соответствует цели. Может ли кто-нибудь дать несколько советов, чтобы вести мои дальнейшие исследования? Я относительно новичок в обработке текста какао.

1 Ответ

0 голосов
/ 06 октября 2011

Не прямой ответ на ваш вопрос, но возможная альтернатива, достаточно хорошая для Apple:

Почему бы не сделать то, что Console.app делает с правильными системными журналами?Каждая запись в журнале (хотя это может быть несколько строк) начинается с очень определенного формата.Console.app использует представление структуры (запись имеет дочернюю строку, если строка слишком длинная для строки таблицы, чтобы все записи имели одинаковый размер для удобного просмотра).Проверьте это в /Applications/Utilities/Console.app под стандартным журналом.

Преимущества: простой выбор всей записи, очень простая фильтрация поиска, чередующиеся цвета строк облегчают просмотр отдельных записей, вы можете использовать переменную высоту строки, чтобы показать все сообщение, если вы нене нравится усеченный / раскрывающий подход.

...