0

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.

4

1 回答 1

0

发生这种情况的三个原因:

1) 用户使用的是一部被越狱的手机 2) 他安装的我的应用程序版本是临时版本 3) 他试图在应用程序购买中访问

显然,越狱的手机无法访问沙箱(当您尝试在 ad hoc 发行版上购买应用程序时会访问该沙箱)。

于 2013-08-26T22:15:28.803 回答