我刚刚在我的 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 并且可以安全地忽略吗?