我刚刚将应用内购买添加到我的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并且可以安全忽略吗?
答案 0 :(得分:1)
看起来像我
propertyListWithData:data options:NSPropertyListImmutableformat:nil error:&error];
返回一个字符串而不是字典,但它似乎不是逻辑。你确定问题来自于此吗?