Как обновить содержимое массива из файла в Swift? - PullRequest
0 голосов
/ 14 мая 2019

Я создаю приложение меню в Swift, чтобы прочитать последнюю строку из файла журнала. Я могу загрузить журнал в массив, но нужно обновить его, желательно автоматически. Как мне получить его, чтобы обновить мой массив? И как мне вызвать это автоматически?

Приложение представляет собой пункт меню. Когда вы щелкаете по нему, появляется окно с текстовым полем, в котором отображается последняя запись в массиве logList. Функция logList.init находится в функции viewDidLoad. Я попытался переместить это на viewWillLoad, но без изменений. Я попытался объявить это с помощью функции .init только в классе, а затем повторил это в viewDidLoad с didset в исходном объявлении, которое обновляет текстовое поле. По-прежнему загружается только при первом открытии.

Объявление переменной:

public var logList = LogLine.init(logLocationSTRING: " ") {
        didSet{
            latestLog = logList.logLines[(logList.logLines.count)-2]
            logLabel.stringValue = latestLog ?? "No logs found."
        }
    }

Инициализация:

    override func viewDidLoad() {
        super.viewDidLoad()
        logList = LogLine.init(logLocationSTRING: "file:///some/log/file.log")
    }

Структура берет строковое значение URL-адреса файла и преобразует его в пригодный для использования URL-адрес, загружает содержимое журнала в переменную, а затем преобразует это содержимое в массив, каждая строка которого является отдельным элементом.

Я ожидаю после закрытия окна и его повторного открытия, что он должен повторно вызвать функцию .init и обновить содержимое переменной logList, но это не так. Переменная никогда не изменится, пока я не выйду из приложения и не открою его снова.

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

viewDidLoad вызывается только один раз, если вы явно не освободите контроллер представления после закрытия окна.

Существует как минимум 3 варианта:

  1. Введите код в viewWillAppear.
  2. Расширить NSStatusBarButton, переопределить mouseDown и загрузить туда данные.
  3. Принять NSMenuDelegate, подключить меню и загрузить данные в menuWillOpen.
0 голосов
/ 14 мая 2019

Звучит так, будто вы стремитесь к viewWillAppear, а не viewDidLoad.

Я не уверен, что понимаю точный поток, который вы описываете, но viewDidLoad происходит только один раз в течение жизненного циклаконтроллер представления, поэтому может случиться так, что перемещение вашего logList кода в viewWillAppear сделает свое дело.

Для получения дополнительной информации см. «Обработка уведомлений, связанных с представлением» в Документация Apple по UIViewController.

...