我有一个具有演示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应用程序可以正常工作。
我将把它添加为答案,因为OP没有跟进我的评论。
当您使用flutter create --template=plugin my_plugin
创建Flutter插件“ MyPlugin”时,以[默认] iOS语言为Swift,将创建两个类:MyPlugin
和SwiftMyPlugin
。您很可能会在SwiftMyPlugin
中实现您的插件。但是MyPlugin
类扩展了NSObject<FlutterPlugin>
,该类确实包含setPluginRegistrantCallback
方法,因此,调用MyPlugin.setPluginRegistrantCallback
不是编译错误,但是您几乎可以肯定要调用SwiftMyPlugin.setPluginRegistrantCallback
。