Принудительно перезагрузить NSBrowser

#cocoa #macos

#cocoa #macos

Вопрос:

Я новичок в Cocoa, поэтому прошу прощения, если это не имеет смысла.

Я использую NSBrowser для получения представления некоторых данных из веб-службы в виде столбца в стиле Finder. NSURLConnection Результат возвращается асинхронно.

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

Я пробовал reloadDataForRowIndexes , noteHeightOfRowsWithIndexesChanged , addColumn reloadColumn и loadColumnZero , но ни один из них не запускает браузер для вызова numberOfRowsInColumn делегата, как я ожидал (и вижу при запуске).

Я знаю, что делегат браузера в порядке, потому что я вижу, что он вызывается при запуске.

Есть ли другой способ попросить браузер обновить, или мне нужно попробовать другой подход?

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

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

Ответ №1:

[browser reloadColumn:0] у меня не сработало, но [browser loadColumnZero] .

Ответ №2:

[browser reloadColumn:0] это правильный путь. Это просто работает, обходной путь не требуется. Ваша ошибка в другом месте, если у вас это не работает.

Комментарии:

1. Что ж, это значительно сократило радиус моего поиска! Оказывается, что ссылка на мой локальный браузер не установлена Interface Builder, как я ожидал, но она передается в метод делегирования ok. Приветствия.

2. Это было вызвано переименованием IBOutlet в заголовочном файле. Я привязал NSBrowser к новому имени, но не удалил старую ссылку. Также это было показано в предупреждениях при сборке, но только при чистой перестройке.