Извините меня, потому что я не могу включить код, потому что эта ситуация столкнулась со мной в работе, и по некоторым соображениям безопасности я не могу поделиться кодом.
У меня есть модуль Objective-c, содержащий компоненты пользовательского интерфейса и основные базовые классы.
Я хочу использовать компонент Swift (RatePlanCardView) в основном проекте. Мне нужно, когда для создания контроллера представления содержится представление с пользовательским классом (RatePlanCardView) и создание для него выхода, я могу вызвать любую функцию в этом пользовательском классе.
Я создал контроллер представления в раскадровке, содержащей представление, затем я изменил класс этого представления на (RatePlanCardView) и создал для него выход.
Когда я следил за отладкой, я обнаружил, что класс этого выхода — UIView, а не (RatePlanCardView), поэтому каждый вызов любой функции в ошибке пользовательского класса происходил, как показано ниже.
Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «-[UIView AdjustCardView]: нераспознанный селектор отправлен экземпляру 0x7ffbae08ab10»
Хотя (adjustCardView) является функцией класса (RatePlanCardView).
1- Я создал модуль Swift для нового компонента (RatePlanCardView), и этот класс наследует класс от модуля ObjC (ExpandableCardView), и он успешно компилируется. Когда я помещаю новый модуль в основной проект и использую его по мере необходимости, все успешно компилируется, но когда я перехожу к своему новому контроллеру представления и вызываю функцию (adjustCardView), возникает ошибка выше. но когда я вижу определение этой функции, xCode перемещает меня к нужной функции, но он не может выполнить какую-либо функцию, потому что уже видит пользовательский класс как UIView, а не RatePlanCardView.
2- Я пытался найти, как создать смешанный модуль разработки, но я не смог найти никакой поддержки учебника для этого решения.
Спасибо за ваше терпение и поддержку и за то, что уделили мне время, чтобы прочитать мои вопросы. Конечно, любое другое решение будет более чем приветствоваться. Также, если вы помогли мне с любым вышеуказанным решением, также спасибо.
Заранее спасибо.
Я создал фреймворк, содержащий код objC и быстрый код с заголовочным файлом моста, и все работало нормально.
@Магнас, я попробую рассказать тебе, спасибо
@Магнас, я пытался, и ничего не вышло
Созданная вами розетка должна выглядеть примерно так:
@property (nonatomic, weak) IBOutlet RatePlanCardView *rpCardViewOutlet;
Теперь перейдите в XIB и подключите этот выход к вашему представлению RatePlanCardView
. Таким образом, вы можете соединить представление с выходом только в том случае, если тип соответствует, и любой вызов функции этого класса должен срабатывать.
Должно, но этого не происходит. Что произошло, так это то, что Xcode видит этот выход типа UIView, а не типа RatePlanCardView.
Пожалуйста, дважды проверьте, правильно ли для UIView установлено значение RatePlanCardView в Identity Inspector. Если это так, я бы удалил розетку в инспекторе подключений и повторил попытку.