2016-02-09 1 views
0

Je suis en France et j'essaie de faire apparaître Apple Pay feuille dans mon application. Lorsque je définis une adresse de livraison par défaut en France dans les paramètres, cela fonctionne. (Et puis je peux passer à une adresse américaine)Apple Pop popup ne s'affiche pas avec des adresses de livraison par défaut spécifiques

Lorsque je définis une adresse de livraison par défaut aux États-Unis dans Paramètres, cela fonctionne parfois mais échoue souvent. Un échec, la feuille de paie Apple ne s'affiche tout simplement pas. (PKPaymentAuthorizationViewController instance et PKPaymentRequest instance sont corrects et non nil)

Il est très étrange ...

+0

La question implicite est, "pourquoi ne se présente-t-elle pas". Pouvez-vous améliorer cette question avec du code pertinent et toute sortie de console lldb qui pourrait donner un indice? D'une certaine manière, les conditions diffèrent entre les cas de travail et de non-travail. Quand je vois le hasard apparent, ma première pensée est "condition de course". – danh

+0

Vous avez raison, je viens de faire un code de paie pomme simple, tout dans le fil principal et ça fonctionne. Je vais enquêter pour savoir quel est le problème. –

Répondre

0

Je l'ai trouvé! Il n'est pas lié à des adresses spécifiques!

La mise en œuvre de cette méthode déléguée de cette façon ne fonctionne pas

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller 
        didSelectShippingContact:(PKContact *)contact 
           completion:(void (^)(PKPaymentAuthorizationStatus, 
                NSArray<PKShippingMethod *> * _Nonnull, 
                NSArray<PKPaymentSummaryItem *> * _Nonnull))completion{ 
    completion(PKPaymentAuthorizationStatusSuccess, @[], _currentRequest.paymentSummaryItems); 
} 

(le _currentRequest est le PKPaymentRequest je faisais contextuellle PKPaymentAuthorizationViewController qui est enregistré en tant que attribut d'instance)

Je ne peux pas expliquer mais le réglage PKPaymentAuthorizationStatusInvalidShippingPostalAddress au lieu de PKPaymentAuthorizationStatusSuccess dans l'achèvement fonctionnera. Et la mise en place d'un point de rupture lorsque nous appelons la fin permettra également d'afficher la feuille de paie Apple.

Mais si vous voulez toujours revenir PKPaymentAuthorizationStatusSuccess dans la méthode d'achèvement, de l'utiliser de cette façon:

completion(PKPaymentAuthorizationStatusSuccess, nil, _currentRequest.paymentSummaryItems); 

Oui, définir une valeur nil à un paramètre spécifié nonnull fonctionnera!