В основанном на представлении NSTableView с одним столбцом, содержащем NSTextField по умолчанию в своем представлении ячейки таблицы, я пытаюсь прослушать подтвержденные пользовательские изменения, подключив действие NSTextField в представлении Interface Builder .xib кметод в моем ViewController для окна.Но во время выполнения (во время инициализации окна) я получаю «Не удалось подключить действие, целевой класс NSObject не отвечает на -textCellChanged».Я не понимаю, какой объект NSObject имеет неправильный таргетинг, и у меня есть много других окон NSView, правильно подключенных к другим выходам и действиям в том же WindowController.
Я вижу другие посты с похожим симптомом, часто также в контексте NSTableView, и безуспешно исследовал решения или частичные решения этих других проблем в моем контексте.Есть ли какая-то особенная магия в подключении ячеек табличного представления в Интерфейсном Разработчике, которую я пропускаю?Или, возможно, по-другому: как на самом деле определяется объект target во время выполнения, когда действие является просто методом класса в владельце файла (и когда это изменяется для разных элементов управления, все проводныетому же владельцу общего суперпредставления)?
Вот некоторые особенности контекста:
- Владелец файла установлен в подкласс NSWindowController, а модуль там правильно унаследован для цели моего приложения.
- Вероятно, уместно: я не использую раскадровки, и объектом верхнего уровня в иерархической структуре представления моего XIB является Window (NSPanel), а не View или View Controller.NSWindowController появляется только внутри XIB как владелец файла (а не как его собственный объект в представлении структуры).
- В любом из различных сценариев подключения, которые я пробовал (см. Ниже), Interface Builder "выглядит так", что операция подключения прошла успешно.После подключения инспектор подключений владельца файла перечисляет предполагаемое соединение в разделе «Полученные действия» («textCellChanged: ... [x] ячейка табличного представления») вместе со многими другими действиями, связывающими компоненты в суперпредставлении NSTableView с другими методами в NSViewController.
- Аналогично, подключение NSTextField в качестве OUTLET в том же NSViewController работает без проблем.Это только действие (или цель / действие ?? в IB, которое только устанавливает «действие»), которое терпит неудачу.
- Владелец файла также является источником данных и делегатом NSTableView, а NSTextField имеет значение Action: Отправить в конце редактирования и поведение: редактируемые.Я не думаю, что что-то из этого имеет отношение к конкретному симптому, который является просто невозможностью подключить действие.
- NSWindowController - Swift;Я попытался реализовать соответствующее действие как в основной реализации NSWindowController, так и в расширении, которое реализует NSTableViewDelegate, чтобы не заметно отличаться.
В других публикациях предлагаются ошибки XCode в проводке, хотя в более старых версиях XCode (Я в 10.2).Вот несколько подходов, которые я пробовал, но все с похожими результатами:
- Ctrl + Перетаскивание из табличного представления Значок ячейки в Outline View IB в исходный модуль NSWindowController, нацеливая туда либо существующий @IBAction, либо разрешая Xcodeсоздать новое Соединение (тип Действие, Объект: Владелец файла) и вместе с ним новый метод в ViewController
- Обратное перетаскивание из исходного кода «радиокружок левой колонки» рядом с @IBAction к представлению таблицыЯчейка в виде структуры моего .xib
- Ctrl + Перетащите значок ячейки (в представлении таблицы) на табличный вид на значок заполнителя / владельца файла, а затем выберите соответствующий метод действия из всплывающего списка методов, реализованных вконтроллер представления.
- Возможно, некоторые другие
Наконец, вот несколько связанных сообщений и как они отличаются:
Этот звучит как идентичный признак, но в комментариях OP утверждает, что исправил проблему путем комбинации установки File Owner для View Controller (выполнено) и обхода блокировки Ошибки XCode (не видны в моем контексте).
Это предполагает, что я ссылаюсь на устаревший (удаленный) метод;определенно не тот случай, когда я разрешаю Xcode создать метод для меня.
В этом посте без ответа предлагается, чтобы пользователь разочаровался в ситуации как ошибка IB и далпредпочтение нецелевой / обходной путь действия.Я полагаю, что я мог бы продолжить прослушивание уведомлений в NSTextField в качестве аналогичного обходного пути.
Наконец, принятый ответ на похожий симптом здесь заключается в том, что соединение с файломВладелец неверен в том случае, когда Владельцем файла был объект NSApplication, а не View Controller.В моем случае File Owner - это объект View Controller, который определяет эти методы, поэтому он выглядит как правильная цель.
Здесь есть какой-нибудь камень?Заранее спасибо за помощь.