2012-12-05 13 views
10

not much report on the crashArresto anomalo dell'applicazione su [[SKPaymentQueue defaultQueue] addTransactionObserver: observer];

Questo è tutto quello che posso ottenere dal crash quando faccio nel applicationDidBecomeActive

MyStoreObserver * observer = [[MyStoreObserver alloc] initWithContext:self.managedObjectContext andDelegate:self]; 

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 

Ma la cosa strana è che sono stato in grado di acquistare due volte in passato e anche se eliminare l'applicazione ri-reun nuovo tutto ciò che non posso sfuggire a questa fossa. Non sembra logica. Posso assegnare init all'osservatore da solo senza problemi e posso chiamare il paymentQueue predefinito senza problemi, ma se provo ad aggiungere l'osservatore delle transazioni alla coda, la vita si ferma. È su ARC e il delegato che ho aggiunto all'osservatore non è il problema. Lo so per certo.

Ho aggiunto un NSLog per ogni metodo nell'osservatore e nessuno ottenere chiamato prima del crollo

soluzione trovata

Ok, sembra che l'osservatore non viene trattenuto dalla coda e quindi la l'osservatore deve essere una variabile di istanza.

Grazie

+0

Forse si dovrebbe aggiungere voi soluzione come una risposta e segnalo come soluzione, altrimenti la taglia rimarrà aperta. –

risposta

10

Ok, sembra che l'osservatore non viene trattenuta dalla coda e quindi l'osservatore deve essere una variabile di istanza (o mantenuto in qualche modo).

+0

potresti fornire qualche esempio di codice? –

+0

variabile di istanza significa che devi mantenere un puntatore sul tuo oggetto in modo che non venga deallocato. Puoi semplicemente creare una proprietà (forte) che punti sul tuo osservatore –

1

Per aggiungere una fonte ufficiale a questa risposta:

All'interno del file di intestazione SKPaymentQueue.h del Storekit quadro è il seguente commento chiaro:

// Observers are not retained. 
// The transactions array will only be synchronized with the server while the queue has observers. 
// This may require that the user authenticate. 
- (void)addTransactionObserver:(id <SKPaymentTransactionObserver>)observer __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
Problemi correlati