Вот решение, которое я придумал:
- Создание NSWindowController, который имеет NSTextView как выход (давайте назовем это A)
- Создать класс Singleton (давайте назовем это B), который инкапсулирует объект A и предоставляет некоторые методы для отправки строк в A (который добавляет его в свой NSTextView) путем чтения файла (который содержит все записи) с использованием
readInBackgroundAndNotify
от NSFileHandle
. При уведомлении он вызывает метод добавления. Он также имеет способ запуска регистрации в файл, который использует freopen(3)
для перенаправления некоторого потока (stderr и stdout atm) в файл в режиме добавления.
- В проекте просто вызовите метод начального ведения журнала B (без необходимости создания экземпляра, но я думаю, это действительно не имеет значения) после его импорта.
Это решение было создано с учетом ответа Джошуа Ноцци и единства Тлинднера и сочетает их. У меня есть и инкапсулированное решение, которое учитывает три запроса в вопросе (я должен добавить только строку кода, я могу вернуться обратно легко, и я могу использовать это решение и в других приложениях). Я заметил, что иногда может быть неправильно, что NSWindowController инкапсулирован таким образом (тогда как все остальные управляются каким-то суперконтроллером).
Я, наконец, решил использовать файловое решение, так как он очень прост в реализации и более какаоподобный, чем у tlindner's. Также он дает возможность иметь файл журнала, который сохраняется на диске. Но, конечно, я, возможно, что-то пропустил, указать на это в комментариях, пожалуйста, ^^
Что вы подразумеваете под "revert back"? –
Чтобы вернуться к предыдущему поведению: NSLogs/printfs и т. Д. Печатаются в консоли. Простите меня за мой плохой английский – rano