#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 к новому имени, но не удалил старую ссылку. Также это было показано в предупреждениях при сборке, но только при чистой перестройке.