2010-04-28 12 views
15

io sono l'attuazione di acquisto applicazioni Mi mando richiesta di Apple Store attraversometodo di risposta productsRequest non sta chiamando

- (void) requestProductData 
{ 
SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: 
     [NSSet setWithObjects: featureAId,featureBId,nil]]; // add any other product here 
request.delegate = self; 
[request start]; 
} 

il metodo di risposta

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
[purchasableObjects addObjectsFromArray:response.products]; 
} 

non sta ottenendo chiamata a tutti. solo una volta ha chiamato su dieci tentativi che ho provato.

qualche idea riguardo questo ..? grazie in anticipo

risposta

41

Provare ad implementare anche il metodo - (void)request:(SKRequest *)request didFailWithError:(NSError *)error - potrebbero esserci degli errori nell'elaborazione delle richieste.

+0

grazie Vladmir ..... ottengo il problema che è dovuto al problema di connessione Internet nel mio dispositivo –

+0

ho provato quel metodo anche a causa di sever problema nessuna richiamata in quel momento –

+0

+1 necessario quell'intestazione di funzione. Quando nessuna connessione internet di questo sarà chiamata ... –

0

Ho avuto un problema simile (errore: impossibile collegarsi a iTunes Store). Dopo aver aggiornato iTunes Beta alla versione più recente, ha iniziato a funzionare di nuovo.

22

Ho affrontato lo stesso problema, ma nel mio caso la causa era che stavo usando Conteggio di riferimento automatico e ho dimenticato di mantenere la richiesta.

Il mio codice è stato come:

- (void) requestProductData 
{ 
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:ProductIdentifier]]; 
    request.delegate = self; 
    [request start]; 
} 

Ma delegato productsRequest: didReceiveResponse: mai stato chiamato.

Una soluzione potrebbe essere:

@property (strong, nonatomic) SKProductsRequest *request; 

- (void) requestProductData 
{ 
    self.request= [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:ProductIdentifier]]; 
    self.request.delegate = self; 
    [self.request start]; 
    // you can nil request property in request:didFailWithError: and requestDidFinish: 
} 
+0

Grazie mille, ha risolto il mio problema. –

+2

Sembra che questo sia stato risolto da Apple, come una volta che si chiama 'start' su una richiesta, ora sembra conservare se stesso e quindi rimarrà in vita fino a quando alla fine fallisce o riesce (almeno iOS 8; non è stato testato con iOS 7 ancora). – Mecki

4

Ho avuto lo stesso problema. Avevo creato una classe di supporto per gestire lo IAP e controllare i prodotti. Ciò che ho finalmente scoperto è che l'istanza della classe che ho creato è stata rilasciata prima che la risposta tornasse, quindi i metodi delegati non sono mai stati chiamati perché non esistevano più.

ho risolto il mio problema mantenendo l'istanza della classe helper nella classe ho chiamato da utilizzare @proprty (forte, nonatomic) ...

Se non si utilizza una classe di supporto e la codifica in una classe esistente quindi la risposta sopra funzionerà conservando il tuo SKProductRequest.

Problemi correlati