以下代码是否会在旧设备上产生崩溃?

时间:2013-08-21 19:52:17

标签: iphone ios cocoa-touch

我有一些代码与我在SKProductRequest的应用内购买有关:

    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:...
    request.delegate = self;
    [request start];
    [request release];

我的一个用户在iPod4上崩溃,我认为可能是因为这个,但是,所有其他设备都可以运行此代码。如果请求在加载时保存在属性中,那可能是问题吗?我会想到[请求开始],该请求将保留在其他地方。

以下是崩溃日志:

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

更新:以下很多人都说这是一个数组越界错误,我认为他们是对的。但奇怪的是,产品请求似乎成功回归,并且它被称为ing [self loadFullVersionPrice],它只是提取我​​的某个产品的价格。当它试图从products数组中检索完整版产品时,我认为它崩溃了。应用程序商店是否可能只返回我的一些产品而不是所有产品?或者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];
}

此外,有问题的iPod Touch 4被判入狱。

1 个答案:

答案 0 :(得分:0)

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

1)用户在监狱打破了电话 2)他正在安装的应用程序版本是临时版本 3)他试图访问应用程序购买

显然,监狱破坏的手机无法访问沙箱(当您尝试在临时分发中购买应用时访问该沙箱)。