我使用测试用户帐户来测试我的In App Purchase应用。我使用的产品名称如#define PRODUCT_IDENTIFIER @"com.companyname.appname.P1"
当我在模拟器中运行我的应用程序时,我在日志中得到了以下内容:
是的你可以付款2013-04-22 11:37:44.809 appname [2382:c07] - [__ NSCFConstantString productIdentifier]:无法识别的选择器发送到实例0x1ac04
代码:
-(void)checkForPayments{
if ([SKPaymentQueue canMakePayments])
{
printf("\n YES u can make payments");
// SKPayment *myPayment = [SKPayment paymentWithProductIdentifier:PRODUCT_IDENTIFIER];
SKPayment *myPayment = [SKPayment paymentWithProduct:PRODUCT_IDENTIFIER];
[[SKPaymentQueue defaultQueue] addPayment:myPayment];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}
答案 0 :(得分:6)
1. SKPayment *myPayment = [SKPayment paymentWithProductIdentifier:PRODUCT_IDENTIFIER]; // CORRECT
2. SKPayment *myPayment = [SKPayment paymentWithProduct:PRODUCT_IDENTIFIER]; //WRONG
您传递的是NSString的PRODUCT_IDENTIFIER是正确的,它需要NSString
错误是因为您传递的参数是NSString,因为它需要SKProduct
而不是NSString
..
要使用SKProduct
,您需要先使用SKProductRequest
获取产品,如下所示
SKProductsRequest *req = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:PRODUCT_IDENTIFIER]];
req.delegate = self;
[req start];
然后在Delegate
的{{1}}中,您必须执行以下操作
SKProductRequest
答案 1 :(得分:0)
嘿,你正在将NSString传递给一个接受其他类型对象的函数。这就是你得到的原因
-[__NSCFConstantString productIdentifier]: unrecognized selector sent to instance
答案 2 :(得分:0)
如果您在应用中定义,请检查您在iTunes上创建的应用是否与inApp匹配。并确保您将inApp与iTunes中的应用相关联。