Нераспознанный селектор вызван на плагине Flutter - PullRequest
1 голос
/ 29 января 2020

У меня есть полностью работающий плагин платформы Flutter с демонстрационным приложением Flutter. Приложение Flutter радостно общается с нативным кодом по каналам и получает ответы. Теперь мне нужно приложение, чтобы работать в фоновом режиме. Следуя различным инструкциям, я обнаружил, что мне нужно вызвать setPluginRegistrantCallback в моем плагине. Но если я это сделаю, приложение вылетает с:

*** Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '+ [MyPlugin setPluginRegistrantCallback:]: нераспознанный селектор отправлен в класс 0x104ed5668'

Мой код:

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)

    GeneratedPluginRegistrant.register(with: self)
    MyPlugin.setPluginRegistrantCallback({ registry in
        if (!registry.hasPlugin("MyPlugin")) {
            MyPlugin.register(with: registry.registrar(forPlugin: "MyPlugin"))
        }

        GeneratedPluginRegistrant.register(with: registry)
    })
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

Есть идеи, что мне не хватает? В противном случае плагин и приложение Runner работают нормально.

1 Ответ

0 голосов
/ 13 февраля 2020

Я добавлю это как ответ, так как ОП не отслеживал мой комментарий.

Когда вы создаете плагин Flutter «MyPlugin», используя flutter create --template=plugin my_plugin, с [по умолчанию] iOS язык как Swift, создаются два класса: MyPlugin и SwiftMyPlugin. Скорее всего, ваш плагин будет реализован в SwiftMyPlugin. Класс MyPlugin, однако, расширяет NSObject<FlutterPlugin>, который содержит метод setPluginRegistrantCallback, поэтому вызов MyPlugin.setPluginRegistrantCallback НЕ является ошибкой компиляции, но вы почти наверняка захотите вызвать SwiftMyPlugin.setPluginRegistrantCallback.

...