Делегат команды не работает при вызове из Swift в Objective C

#ios #swift #objective-c #cordova

#iOS #swift #objective-c #кордова

Вопрос:

Я пытаюсь соединить Swift 5 и существующую функцию Objective c. Обычно запрос Cordova попадает на уровень Swift, который в свою очередь вызывает Objective C и возвращает результат обратно в Cordova. Во время компиляции я получаю эту ошибку

        NSLog(@"Result : %@ ", result);
       CDVPluginResult* pluginResu<
       pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:result];
       // Below line throwing "No known class method for selector 'commandDelegate'"
      [[self commandDelegate] sendPluginResult:pluginResult callbackId:command.callbackId];
 

введите описание изображения здесь

Ответ №1:

commandDelegate Свойство является свойством экземпляра, а не свойством класса. Подсказка заключается в ошибке «Нет известного метода класса» — приведенный выше код должен находиться в настоящее время в методе класса (обозначается в ObjC ), но на commandDelegate свойство можно ссылаться только из метода экземпляра (обозначается - ). self в этом контексте это ссылка на сам класс, а не на экземпляр класса.

Убедитесь, что заключающая функция является методом экземпляра (если это то, что вам нужно). Также убедитесь, что ваш плагин реализует CDVPlugin интерфейс ( @interface MyPlugin : CDVPlugin в заголовочном файле вашего плагина), иначе вы не сможете получить доступ к commandDelegate свойству.

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

1. Спасибо за ваш ответ, позвольте мне проверить это.

Ответ №2:

Превращение его в переменную для глобальных.

глобальные переменные структуры { статическая переменная sampleCommandDelegate: есть? }

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

1. Это один из способов решения проблемы, но он кажется немного взломом. Однако это может быть вполне приемлемо для вашего варианта использования. Я бы посоветовал потратить время на рефакторинг кода, чтобы вам не нужно было статически ссылаться на делегат команды. Что вы делаете в своем методе, что означает, что это должен быть метод класса, а не метод экземпляра?

2. @CPR Да, вы правы и согласны. Это исправление будет на данный момент. Я должен вернуться 🙂