Я надеюсь, что это достаточно распространенная проблема, и на довольно широкий вопрос может быть дан очевидный ответ.Почему мой NSTableView
- после загрузки приложения - иногда заполняется данными из подключенного ( Core Data ) источника данных, а иногда пустым.Это кажется случайным.Ничто не меняется между выходом и запуском.
Справка:
- Источник данных
NSTableView
представляет собой один NSArrayController
, который имеет managedObjectContext
, связанный с моделью данных ядра объекта.. NSTableView
и NSArrayController
все правильно подключены к розеткам и привязкам.Отладка успешно работала с любыми тестами, о которых я думал, и тот факт, что он работает случайным образом, предполагает, что что-то работает. - Я собираюсь предположить, что проблема заключается в том, что элемент моего проекта иногда загружается вовремя, а незагружен во времени.Я также предположил, что
NSArrayController
не получил данные вовремя, пока все остальное не закончило загрузку.Я попытался исправить это, задав NSTableView
до reloadData
после завершения загрузки NSArrayController
:
[jobsController addObserver:self forKeyPath:@"arrangedObjects.jobTitle" options:0 context:nil];
и
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (object == jobsController)
{
NSLog(@"jobsController finished loading");
[tableView reloadData];
}
}
Я также тестировал, используя изолированную кнопку тестирования, которая вызывала reloadData
для NSTableView
всякий раз, когда я нажимал на нее.Это не имело никакого эффекта.Извиняюсь за отсутствие кода.Проект довольно большой и сложно выделить код для этой проблемы.Я надеюсь, что эта проблема достаточно распространена, и ответ может быть определен на основе аналогичного опыта.
Обновление
Я довольно уверен, что это связано с тем, что NSArrayController
не готов (поскольку журнал arrangedObjects
показывает пустой набор, когда таблица не заполняетсяи наоборот, когда это так).Чтобы немного расширить мои настройки, у меня есть два других NSArrayController
s (итак, всего 3).Контроллер, который заполняет NSTableView
, является дочерним по отношению к одному контроллеру, который является дочерним по отношению к другому.У меня есть теория, что таблица заполняется только тогда, когда порядок загрузки NSArrayControllers является (по совпадению) parent> parent> parent, поскольку каждый дочерний элемент полагается на своего родителя NSArrayController
для своего набора содержимого.Возможно, мое решение состоит в том, чтобы вручную выбрать порядок загрузки контроллеров?