I have this bit of code relating to my in app purchases for an SKProductRequest
:
SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:...
request.delegate = self;
[request start];
[request release];
One of my users is getting a crash on an iPod4 and I think it might be from this, however, all other devices are able to run this code OK. Should request be saved in a property while its loading, could that be the issue? I would think with [request start], that request would be retained somewhere else.
Here is the crash log:
Last Exception Backtrace:
0 CoreFoundation 0x3275229e __exceptionPreprocess + 158
1 libobjc.A.dylib 0x3a3c597a objc_exception_throw + 26
2 CoreFoundation 0x3269ce88 -[__NSArrayI objectAtIndex:] + 160
3 AppsHappens Lite 0x000e43ac 0xd8000 + 50092
4 StoreKit 0x3450c22e __34-[SKProductsRequest _handleReply:]_block_invoke_0 + 378
5 libdispatch.dylib 0x3a7dd11a _dispatch_call_block_and_release + 6
6 libdispatch.dylib 0x3a7dc4b2 _dispatch_client_callout + 18
7 libdispatch.dylib 0x3a7dddc6 _dispatch_main_queue_callback_4CF$VARIANT$up + 222
8 CoreFoundation 0x32725f36 __CFRunLoopRun + 1286
9 CoreFoundation 0x32698eb8 CFRunLoopRunSpecific + 352
10 CoreFoundation 0x32698d44 CFRunLoopRunInMode + 100
11 GraphicsServices 0x362492e6 GSEventRunModal + 70
12 UIKit 0x345ae2fc UIApplicationMain + 1116
13 AppsHappens Lite 0x000e3a8e 0xd8000 + 47758
14 AppsHappens Lite 0x000dadb4 0xd8000 + 11700
Updated: A lot of folks below are saying that it's an array out of bounds error and I think they're right. Strange thing is though, it appears the product request is coming back successfully, and it's called ing [self loadFullVersionPrice]
which simply extracts the price for one of my products. When it tries to retrieve the Full Version product from the products
array, I think that's when it crashes. Is it possible the app store would only return some of my products and not all of them? Or some issue with an iPod4?
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
self.products = response.products;
if (self.products)
{
[self loadFullVersionPrice];
}
}
- (void) loadFullVersionPrice
{
SKProduct *product = [[self.products objectAtIndex:[self.products count]-1] retain];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setLocale:product.priceLocale];
self.fullVersionPrice = [numberFormatter stringFromNumber:product.price];
[numberFormatter release];
[product release];
}
Also, the iPod Touch 4 in question is jail broken.