Как исправить приложение, пытающееся представить нулевой контроллер модального представления на цели?

Я попытался внедрить Apple Pay в свое приложение, но получаю сообщение об ошибке: «Приложение пыталось представить контроллер с нулевым модальным представлением на цели» в следующем фрагменте кода. Может ли кто-нибудь сказать, был ли я пошло не так.

PKPaymentAuthorizationViewController *vc = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:payment];
vc.delegate = self;
[self presentViewController:vc animated:YES completion:nil];

person Arun    schedule 17.09.2016    source источник


Ответы (3)


На самом деле это будет работать на Симуляторе, но не на реальном устройстве, если Apple Pay НЕ ПОДДЕРЖИВАЕТСЯ в стране, которой назначено устройство. Пожалуйста, учтите это.

person Bartłomiej Semańczyk    schedule 24.05.2017

// как только проверьте ваш контроллер, правильно ли он инициализируется или нет

     if (!viewController) { 
          [self presentViewController:vc animated:YES completion:nil];
     } else {
       // handle error , may be request is not proper to initializing the    PKPaymentAuthorizationViewController
  }
person Andey Satyanarayana    schedule 17.09.2016

Вероятно, разрешение Apple Pay для вашего приложения настроено неправильно.

Я заметил, что canMakePayments возвращает YES, а canMakePaymentsUsingNetworks: возвращает NO, когда права не установлены.

(Я также заметил, что они оба могут возвращать YES, когда идентификатор продавца, который вы установили в своем PKPaymentRequest, не соответствует идентификатору продавца вашего права на Apple Pay. В этом случае ваш PKPaymentAuthorizationViewController будет ненулевым, но представление его регистрирует загадочная ошибка в консоли).

Поэтому, чтобы убедиться, что Apple Pay настроен для вашего приложения, убедитесь, что «Apple Pay» включено в разделе «Возможности» ваших целевых настроек и что у него есть идентификатор продавца (который вам потребуется настроить, если вы еще этого не сделали).

Тогда либо:

  • Если вы используете метод прямой интеграции PassKit, убедитесь, что вы устанавливаете для свойства merchantIdentifier соответствующий идентификатор продавца в праве.

Пожалуйста, проверьте этот код:

if ([PKPaymentAuthorizationViewController canMakePayments]) {
    NSLog(@"Can Make Payments");
    PKPaymentAuthorizationViewController *viewController = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
    if (!viewController) { /* ... Handle error ... */ }
    viewController.delegate = self;
    [self presentViewController:viewController animated:YES completion:nil];
}
else {
    NSLog(@"Can't Make payments");
}

or

сошлитесь на этот URL с образцом кода: https://developer.apple.com/library/content/ApplePay_Guide/CreateRequest.html#//apple_ref/doc/uid/TP40014764-CH3-SW2

person Bhadresh Kathiriya    schedule 17.09.2016
comment
@bhardresh работает в симуляторе, но на устройстве происходит сбой. - person Arun; 17.09.2016
comment
к какому сертификату я должен добавить uuid - person Arun; 17.09.2016
comment
перейти к возможностям-›Проверка Apple Pay все содержат истинное или красное отображение/ - person Bhadresh Kathiriya; 17.09.2016
comment
Давайте продолжим обсуждение в чате. - person Bhadresh Kathiriya; 17.09.2016