#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 Да, вы правы и согласны. Это исправление будет на данный момент. Я должен вернуться 🙂