puede publicidad procesar pago online momento metodo invalido invalida gratis forma este crear compras app iphone objective-c xcode in-app-purchase storekit

iphone - publicidad - EXC_BAD_ACCESS durante la prueba de compra de la aplicación



itunes store no puede procesar compras en este momento (7)

Ejecutar una prueba para mi compra de la aplicación (la primera vez que hago en compras de la aplicación). Obtengo EXC_BAD_ACCESS en la tercera línea de este código:

SKPayment *payment = [SKPayment paymentWithProduct:electronicProd]; [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue] addPayment:payment];

El está bajo una IBAction para un botón. electronicPack se declara en el encabezado como SKProduct. Lanzó algunos NSLogs en los productos que Requerió Recibió Recibido, y cuando se solicitó el producto (en viewDidLoad) y mostraron que estaba recogiendo el producto correctamente y almacenándolo en electronicPack. Se definió electronicPack como [[request.products] objectAtIndex: 0] en la página didReceiveResponse. Así que sí. Ahí es donde estoy, no sé qué hacer. Cualquier ayuda es apreciada.

ACTUALIZACIÓN: FIJADO se dejó accidentalmente en el código que estaba agregando un observador de transacciones extra lol


¡La respuesta del Sr. T es la mejor solución!

En swift lo llamo removeTransactionObserver aquí:

deinit { SKPaymentQueue.defaultQueue().removeTransactionObserver(self) }


He tenido el mismo problema, mi solución fue llamar.

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

al salir de la App Store en mi aplicación. Tal vez ayude a alguien en el futuro.


Necesitas conservar el objeto que estás creando.

- (void)viewDidLoad { //... stuff SKProduct* electronicProduct = //... [electronicProduct retain]; //... otherstuff }

viewDidLoad está envuelto por el sistema en un grupo de autorelease, paymentWithProduct: devuelve un objeto de autorelease. Cuando se realiza viewDidLoad, se liberan todos los objetos de autorelease, es por eso que se obtiene un mal acceso a la memoria cuando se intenta acceder a él más adelante.


Parece que el problema es al intentar agregar un observador de transacciones antes de eliminar el anterior. Agregue lo siguiente a su controlador para solucionar este problema:

- (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; [[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; }

¡Espero que esto ayude!


Si está creando una clase dedicada para SKPaymentTransactionObserver , no olvide que debe conservarse.

Recibí el error antes de darme cuenta de esto, aquí hay un ejemplo en AppDelegate :

class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var myTransactionObserver: MyTransactionObserver! func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // don''t let myTransactionObserver = MyTransactionObserver() // do myTransactionObserver = MyTransactionObserver() SKPaymentQueue.default().add(myTransactionObserver) return true } // ... }


Tengo el mismo problema, mi solución fue llamar a [[SKPaymentQueue defaultQueue] removeTransactionObserver: self];

en la transacción del observador de la tienda finalizar / fallar / completar devoluciones de llamada


Tuve el mismo error, bastante simple de resolver realmente. En mi archivo de encabezado tuve un SKProduct declarado:

@property SKProduct *product;

Acabo de cambiarlo a

@property (retain) SKProduct *product;

y todo funciona bien. Espero que esto ayude a alguien.