Вопрос

Итак, вот что у меня есть:

  • NSTableView с источником данных NSMutableArray
  • FSEvents отслеживает папку, содержащую файл, содержащий данные для табличного представления (с использованием SCEСобытия за качество абстракции Objective-C)
  • FSEvents запускает ту же функцию, что и кнопка перезагрузки в пользовательском интерфейсе.Эта функция обновляет представление таблицы новым источником данных на основе содержимого указанного файла через setDataSource:.

И вот что происходит:

  • Если я внесу изменение в файл, сработает событие FSEvent и будет вызван метод обновления.
  • Массив, который должно принимать табличное представление, действительно включает изменения, вызвавшие событие FSEvent.
  • setDataSource: отправляется в NSTableView с правильным источником данных.
  • Изменения не отображаются в виде таблицы!

Но потом:

  • Если я нажму кнопку обновления, которая запускает тот же метод, что и FSEvent, представление таблицы обновится новыми данными.

Я также попробовал заменить FSEvent на NSNotification (NSApplicationDidBecomeActiveNotification), но происходит то же самое.

Кто-нибудь знает, почему это происходит?

Редактировать:Для пояснения суть моего вопроса такова:Почему мой NSTableView перезагружается должным образом при нажатии кнопки, но не при запуске FSEvent или NSNotification?

Редактировать:Благодаря Дисиу, я выяснил, что на самом деле все ссылки моего пользовательского интерфейса указывают на 0x0 при срабатывании события, но затем имеют действительные адреса при срабатывании нажатия кнопки.Все эти объекты объявлены в IB, поэтому в моем коде для них не происходит создания экземпляров или выделения.Итак, мой вопрос сейчас:что я могу сделать, чтобы эти указатели не указывали на ноль?

Это было полезно?

Решение

похоже, что когда вы регистрируетесь для события/уведомления, вы передаете другой экземпляр вашего класса контроллера.

Другие советы

Мы называем перезагрузить данные в NSTableView, когда у нас есть новые данные для добавления/удаления в таблицу.

Это может помочь заставить NSTableView перерисоваться.

Хотя я не совсем уверен, что вы об этом спрашиваете.Формулировка вашего вопроса немного запутанна, вы описываете ряд событий, но ни разу не задаете правильный вопрос.

Пробовали ли вы вызвать свой метод из вашего FSEvent на втором проходе цикла выполнения?

[myObject performSelector:@selector(reloadAction:) withObject:nil afterDelay:0.0];

Вы устанавливаете NSArray непосредственно в качестве источника данных табличного представления?

Это не так NSTableView работает.Источник данных должен быть объектом, соответствующим NSTableDataSource. NSArray нет.Вы сами пишете источник данных;вероятно, это будет тот же объект, который вы сейчас вызываете setDataSource:.

Другой способ — использовать привязки.

Может быть, ссылка на представление таблицы в рамках вашего метода обновления недействительна?

Т.е.вы уверены, что не вызываете [nil reloadData], который не выдает никаких ошибок?Ваша ссылка на ваше табличное представление может быть нулевой в коде обновления, если вы установили ее до пробужденияFromNib или в некоторых других обстоятельствах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top