[__NSCFConstantString productIdentifier]:无法识别的选择器发送到实例0x1ac04'

时间:2013-04-22 06:34:48

标签: iphone ios in-app-purchase itunesconnect

我使用测试用户帐户来测试我的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];              
    }

3 个答案:

答案 0 :(得分:6)

   1. SKPayment *myPayment = [SKPayment paymentWithProductIdentifier:PRODUCT_IDENTIFIER]; // CORRECT
   2. SKPayment *myPayment = [SKPayment paymentWithProduct:PRODUCT_IDENTIFIER]; //WRONG
  1. 您传递的是NSString的PRODUCT_IDENTIFIER是正确的,它需要NSString

  2. 错误是因为您传递的参数是NSString,因为它需要SKProduct而不是NSString ..

  3. 要使用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中的应用相关联。