NativeScript 将 UIViewController 传递给本机 iOS 方法

NativeScript Passing UIViewController to native iOS method

我正在尝试按照 nativescript 插件种子(iOS 说明 https://docs.connect.squareup.com/payments/readersdk/setup-ios)为 Square Reader 创建一个新插件。最后一步是传入一个 UIViewController 对象,以便它可以在您的应用程序中显示结帐页面。尝试传递所需参数时,我一直收到这样的错误:

-[SquareReader checkoutController:didFailWithError:]: unrecognized selector sent to instance 0x10aa5c960 * JavaScript call stack: ( 0 UIApplicationMain@[native code] 1 start@file:///app/tns_modules/tns-core-modules/application/application.js:272:26 2 anonymous@file:///app/app.js:4:18 3 evaluate@[native code] 4 moduleEvaluation@:1:11 5 @:7:48 6 promiseReactionJob@:1:11 ) * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SquareReader checkoutController:didFailWithError:]: unrecognized selector sent to instance 0x10aa5c960' *** First throw call stack: (0x185676d8c 0x1848305ec 0x185684098 0x18567c5c8 0x18556241c 0x1019b21f4 0x184f68aa0 0x184f68a60 0x184f7565c 0x18561f070 0x18561cbc8 0x18553cda8 0x187522020 0x18f55c758 0x101640044 0x10163e7a4 0x10163e26c 0x100cf5630 0x1012f0e14 0x1012f9a24 0x1012f9a34 0x1012f2ee0 0x10128c198 0x101261e94 0x1013f6b9c 0x100d0a354 0x101492964 0x1012fa494 0x1012f9a34 0x1012f9a34 0x1012f9a34 0x1012f2ee0 0x10128c198 0x101261e94 0x1013f6c80 0x10148e8e0 0x100d01898 0x100d47f50 0x10079629c 0x184fcdfc0)

我正在尝试在我的演示应用程序中实现 UIViewController

export class HelloWorldModel extends UIViewController { ... }

错误来自这些行:

let checkoutController = new SQRDCheckoutController( {parameters: params, delegate: this }); checkoutController.presentFromViewController(view);

其中 this 是我制作的 SquareReader class 对象,它具有 checkoutControllerDidFailWithError 函数(我需要实现 SQRDCheckoutControllerDelegate)并且viewHelloWorldModel class.

的实例化

我没有看到将 UIViewControllers 传递给 {N} 中的本机 iOS 方法的任何内容,但我发现 https://discourse.nativescript.org/t/example-of-extending-uiviewcontroller-in-angular-2-and-nativescript/469 哪个可能相似?

请参阅 Objective C to JS docs 以了解调用本机 api 的正确方法。

假设 SQRDCheckoutController 是控制器,用参数初始化它的正确方法是

SQRDCheckoutController.initWithParametersDelegate(params, delegate)

如果您使用 TypeScript,generate declaration 文件,那么您可能很容易理解调用可用本机 api 方法的 JS 形式是什么。

您可以参考 tns 核心模块以获取 UIViewController 实现的示例。如果您打算将此插件开源,请随时将其上传到 GitHub,社区的插件大师可能会轻松帮助您。