VerificationController无法识别的选择器iOS 5.0.1

时间:2012-11-20 16:05:56

标签: iphone ios5 in-app-purchase

我刚刚将应用内购买添加到我的iOS应用中,而且我的一些用户正在崩溃

-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0xf0a6f10

从BugSense获得,内存位置是指Apple的VerificationController.m摘录的最后一行

- (BOOL)isTransactionAndItsReceiptValid:(SKPaymentTransaction *)transaction
{
    if (!(transaction && transaction.transactionReceipt && [transaction.transactionReceipt length] > 0))
    {
        // Transaction is not valid.
        return NO;
    }

    // Pull the purchase-info out of the transaction receipt, decode it, and save it for later so
    // it can be cross checked with the verifyReceipt.
    NSDictionary *receiptDict       = [self dictionaryFromPlistData:transaction.transactionReceipt];
    NSString *transactionPurchaseInfo = [receiptDict objectForKey:@"purchase-info"];
...

receiptDict由此代码生成(也包含在VerificationController.m中)

- (NSDictionary *)dictionaryFromPlistData:(NSData *)data
{
    NSError *error;
    NSDictionary *dictionaryParsed = [NSPropertyListSerialization propertyListWithData:data
                                                                           options:NSPropertyListImmutable
                                                                            format:nil
                                                                             error:&error];
    if (!dictionaryParsed)
    {
        if (error)
        {
#warning Handle the error here.
        }
        return nil;
    }
    return dictionaryParsed;
}

应返回NSDictionary或nil。

ARC已开启。这个问题似乎只发生在iOS 5.0.1用户身上。虽然我确实对VerificationController.m进行了必要的更改,但这一部分并未受到影响。我似乎无法在运行iOS 5.1.1的iPad上复制问题,但是用户已经表示即使在重新安装应用程序后它仍然存在。如果有人能看到我做得不对的简单事情,我会很感激。

修改 跟进问题。

是什么意思
- (BOOL)isTransactionAndItsReceiptValid:(SKPaymentTransaction *)transaction

transaction.transactionReceipt

只提供NSString并且可以安全忽略吗?

1 个答案:

答案 0 :(得分:1)

看起来像我

 propertyListWithData:data options:NSPropertyListImmutableformat:nil error:&error];

返回一个字符串而不是字典,但它似乎不是逻辑。你确定问题来自于此吗?