2012-08-03 19 views
0

Я установил свою покупку в приложении, создав два идентификатора пакета. I создал тестовую учетную запись и проверил покупку в приложении ... он работал отлично ... через неделю после того, как я протестировал im, получая это ошибка *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array' *** First throw call stack: и его не возвращает продукты ... может у ребят помочь мне out.what возможно может быть неправильно с этимВ приложении не работает

-(void)Declarations 
{ 
if ([SKPaymentQueue canMakePayments]) { 

    NSLog(@"parental functions are disabled"); 
    SKProductsRequest *productRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObjects:@"com.techzone.9xo.onedollar",@"com.techzone.9xo.twodollar",nil]]; 
    productRequest.delegate=self; 
    [productRequest start]; 
}else { 
    NSLog(@"parental functions are enabled"); 
} 

} 
    -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse: (SKProductsResponse *)response 
{ 
SKProduct *validProduct=nil; 
int count = [response.products count]; 
NSLog(@"number of prouducts present:%d",count); 

if(_HintValue) 
{ 
    validProduct = [response.products objectAtIndex:0]; 

} 
if (!_HintValue) { 
    validProduct = [response.products objectAtIndex:1]; 
} 
NSLog(@"the product is :%@",validProduct.localizedTitle); 
SKPayment *skpayment = [SKPayment paymentWithProduct:validProduct]; 
[[SKPaymentQueue defaultQueue] addPayment:skpayment]; 
[[SKPaymentQueue defaultQueue]addTransactionObserver:self]; 

} 
    - (void)request:(SKRequest *)request didFailWithError:(NSError *)error 
    { 
    NSLog(@"Failed to connect with error: %@", [error localizedDescription]); 

} 
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
for (SKPaymentTransaction *transaction in transactions) { 

    switch (transaction.transactionState) { 
     case SKPaymentTransactionStatePurchasing: 
      NSLog(@"stuff is getting purchased"); 
      break; 
     case SKPaymentTransactionStatePurchased: 
      NSLog(@"purchased properly"); 
      NSInteger currentValue=[Util getIntegerValueForKey:@"hintValue"]; 
      if(_HintValue) 
      [Util setIntegerValue:10+currentValue forKey:@"hintValue"]; 
      if (!_HintValue) 
      [Util setIntegerValue:25+currentValue forKey:@"hintValue"]; 
      [[SKPaymentQueue defaultQueue]finishTransaction:transaction]; 
      break; 
     case SKPaymentTransactionStateRestored: 
      [[SKPaymentQueue defaultQueue]finishTransaction:transaction]; 
      break; 
     case SKPaymentTransactionStateFailed: 
      if (transaction.error.code != SKErrorPaymentCancelled) { 
       NSLog(@"error happened"); 
      } 
      [[SKPaymentQueue defaultQueue]finishTransaction:transaction]; 
      break; 
     default: 
      break; 
    } 
    } 
    } 

ответ

2

проблема в том, что вы получаете пустой список допустимых идентификаторов продуктов. Вы получаете доступ к objectAtIndex:0 пустого массива, который создает эту ошибку.

если вы проверите response.invalidProductIdentifiers, вы найдете идентификаторы вашего продукта.

К сожалению, это может иметь много причин. Посмотрите на этот checklist of reasons, который может привести к недопустимым идентификаторам продуктов.

+0

Дело в том, что на прошлой неделе все работало нормально, но сегодня его нет ... любая идея ... я еще не опубликовал приложение ... и я тестировал его с помощью тестовой учетной записи – user578386

+0

У меня была та же проблема. Кажется, что иногда изолированный AppStore (который используется для тестирования) не работает. Но обычно не более двух часов. Если ваша проблема не исчезнет, ​​вы должны взглянуть на контрольный список, хотя, если он работал раньше, и вы действительно ничего не изменили, я предполагаю, что песочница не работает. – joern

+0

И все же это не помешает, если вы удалите приложение с вашего устройства и очистите свой проект. Если вы еще этого не сделали. – joern

Смежные вопросы