NativeScript将UIViewController传递给本机iOS方法

时间:2018-10-11 18:23:37

标签: ios uiviewcontroller nativescript nativescript-plugin square-reader

我正在尝试按照nativescript插件种子(iOS指令https://docs.connect.squareup.com/payments/readersdk/setup-ios)为Square Reader创建一个新插件。最后一步是传递UIViewController对象,以便它可以在您的应用程序中显示结帐页面。尝试传递必需的参数时,始终出现如下错误:

  

-[SquareReader checkoutController:didFailWithError:]:无法识别的选择器已发送到实例0x10aa5c960    * JavaScript调用堆栈:   (   0 UIApplicationMain @ [本地代码]   1个start @ file:///app/tns_modules/tns-core-modules/application/application.js:272:26   2匿名@文件:///app/app.js:4:18   3评价@ [本地代码]   4个模块评估@:1:11   5 @:7:48   6 promiseReactionJob @:1:11   )   * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[SquareReader checkoutController:didFailWithError:]:无法识别的选择器已发送至实例0x10aa5c960'   ***首先抛出调用堆栈:   (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

  

导出类HelloWorldModel扩展了UIViewController {...}

错误来自以下几行:

  

let checkoutController = new SQRDCheckoutController({参数:params,委托:this});   checkoutController.presentFromViewController(view);

其中this是我制作的具有功能SquareReader(需要实现checkoutControllerDidFailWithError的{​​{1}}类对象,而SQRDCheckoutControllerDelegateview类的实例。

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

1 个答案:

答案 0 :(得分:1)

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

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

SQRDCheckoutController.initWithParametersDelegate(params, delegate)

如果您使用TypeScript,则generate declaration个文件,以便您可以轻松地了解调用可用的本机api方法的JS形式。

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