nericode / nativescript-mercadopago-px

Mercado Pago's Official Android | iOS checkout library
Apache License 2.0
3 stars 1 forks source link

[UIApplicationDelegateImpl window]: unrecognized selector sent to instance #6

Closed sebalopezz closed 4 years ago

sebalopezz commented 4 years ago

Which platform(s) does your issue occur on?

Please, provide the following version numbers that your issue occurs with:

Please, tell us how to recreate the issue in as much detail as possible.

Describe the steps to reproduce it.

En iOS al avanzar a la vista en la que cargas los datos de la tarjeta, una vez que ya seleccionaste la opcion "Tarjeta de credito" la aplicacion se rompe y devuelve este error.

En Android funciona perfecto.


file: node_modules/@nativescript/core/application/application.ios.js:312:26: JS ERROR Error: -[UIApplicationDelegateImpl window]: unrecognized selector sent to instance 0x600001e229c0
nericode commented 4 years ago

@sebalopezz solo te pasa cuando abres el teclado para ingresar los datos de la tarjeta, o te pasa en cualquier otro input de la aplicación?

nericode commented 4 years ago

Una solución simple es agregar esto en tu main.ts

declare var UIResponder,
    UIApplicationDelegate;

if (app.ios) {
    var appDelegate = UIResponder.extend(
        {
            get window() {
                return this._window;
            },
            set window(aWindow) {
                this._window = aWindow;
            },
        },
        {
            protocols: [UIApplicationDelegate],
        }
    );

    app.ios.delegate = appDelegate;
}

...

platformNativeScriptDynamic().bootstrapModule(AppModule);
sebalopezz commented 4 years ago

Estoy utilizando Nativescript Vue con Javascript (no Typescript)

Tu codigo no me funciono tal cual lo pasaste, pero hice algunas modificaciones a partir de lo que pasaste y logre que funcione:

const application = require("tns-core-modules/application");
const MyDelegate = (function (_super) {
    __extends(MyDelegate, _super);
    function MyDelegate() {
        _super.apply(this, arguments);
    }
    MyDelegate = UIResponder.extend(
      {
          get window() {
              return this._window;
          },
          set window(aWindow) {
              this._window = aWindow;
          },
      },
      {
          protocols: [UIApplicationDelegate],
      }
    );

    MyDelegate.ObjCProtocols = [UIApplicationDelegate];
    return MyDelegate;
})(UIResponder);

application.ios.delegate = MyDelegate;

Muchas gracias!

En estos dias cuando tenga tiempo, envio una PR para agregar estas cuestiones al README.md